众所周知,使用eval()是一种潜在的安全风险,因此ast.literal_eval(node_or_string)促进了使用
但是在python 2.7中,它ValueError: malformed string在运行此示例时返回:
>>> ast.literal_eval("4 + 9")
Run Code Online (Sandbox Code Playgroud)
而在python 3.3中,此示例按预期工作:
>>> ast.literal_eval('4+9')
13
Run Code Online (Sandbox Code Playgroud)
为什么它运行在python 3而不是python 2?如何在不使用冒险eval()功能的情况下在python 2.7中修复它?
为什么文字评估5 * 7失败,而5 + 7不是?
import ast
print(ast.literal_eval('5 + 7'))
# -> 12
print(ast.literal_eval('5 * 7'))
# ->
Traceback (most recent call last):
...
ValueError: malformed node or string: <_ast.BinOp object at ...>
Run Code Online (Sandbox Code Playgroud)
该文件没有解释这一点.
在SO上回答这个问题之后我发现了这个问题:得到一个字符串的结果.