1 介绍
ast.literal_eval
是 Python 标准库 ast
模块中的一个函数,用于安全地评估表示 Python 字面量或容器(如列表、字典、元组、集合)的字符串
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'}
2 和eval的区别/ast.literal_eval的禁忌
ast.literal_eval
仅能解析 Python 字面量和一些容器类型(如列表、字典、元组、集合等),这意味着它不能计算包含 Python 表达式或函数调用的字符串。- 这是一个设计上的限制,以确保安全性,防止执行潜在危险的代码。
无法执行的【这些eval都可以】:
- 数学表达式
- 函数调用
- 条件表达式