【发布时间】:2020-09-07 02:16:14
【问题描述】:
eval 我可以得到以下信息:
str1 = "23145"
str2 = "str1"
print(str2)
输出:
23145
工作得很好。
ast.literal_eval 未按预期工作:
import ast
print(ast.literal_eval(str2))
获取:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Volumes/app/python/anaconda3/lib/python3.7/ast.py", line 91, in literal_eval
return _convert(node_or_string)
File "/Volumes/app/python/anaconda3/lib/python3.7/ast.py", line 90, in _convert
return _convert_signed_num(node)
File "/Volumes/app/python/anaconda3/lib/python3.7/ast.py", line 63, in _convert_signed_num
return _convert_num(node)
File "/Volumes/app/python/anaconda3/lib/python3.7/ast.py", line 55, in _convert_num
raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.Name object at 0x10ce34190>
【问题讨论】:
-
首先,在第一个示例中,您实际上并没有使用
eval。其次,literal_eval顾名思义,仅用于文字,而不是名称:提供的字符串或节点只能由以下 Python 文字结构组成:字符串、字节、数字、元组、列表、字典、集合、布尔值和无。
标签: python