ast.literal_eval() 是一个 Python 的内置函数,它用于解析并执行一个包含 Python 文字字面值的抽象语法树(AST)。这个函数非常有用,因为它可以用来处理那些不包含任何可执行代码的字符串,但需要以一种安全的方式进行。它主要用于处理数字、字符串、元组、列表、字典、集合和 None。
# @Author : 小红牛
# 微信公众号:wdPython
import ast
# 解析并执行一个数字表达式
num = ast.literal_eval("3.14")
print(num) # 输出:3.14
# 解析并执行一个字符串表达式
str_ = ast.literal_eval('"Hello, world!"')
print(str_) # 输出:"Hello, world!"
# 解析并执行一个元组表达式
tuple_ = ast.literal_eval("(1, 2, 3)")
print(tuple_) # 输出:(1, 2, 3)
# 解析并执行一个列表表达式
list_ = ast.literal_eval("[1, 2, 3]")
print(list_) # 输出:[1, 2, 3]
# 解析并执行一个字典表达式
dict_ = ast.literal_eval("{'name': 'Alice', 'age': 25}")
print(dict_) # 输出:{'name': 'Alice', 'age': 25}
# 解析并执行一个集合表达式
set_ = ast.literal_eval("{'apple', 'banana', 'cherry'}")
print(set_) # 输出:{'apple', 'banana', 'cherry'}
请注意,ast.literal_eval() 不能解析并执行包含 Python 代码的字符串。例如,以下的代码将抛出一个 SyntaxError:
ast.literal_eval("print('Hello, world!')")
# SyntaxError: invalid syntax
这是因为 “print(‘Hello, world!’)” 是一个合法的 Python 表达式,但它不是一个合法的文字字面值。如果你需要解析并执行包含 Python 代码的字符串,你应该使用 exec() 函数。但请注意,exec() 不像 ast.literal_eval() 那样安全,因为它可以执行任何 Python 代码。