我有一个语法树
Tree(if, [Tree(condition, [Token(VARIABLE, 'age'), Token(ACTION_OPERATOR, '>'), Token(SIGNED_NUMBER, '18')]), Tree(result, [Tree(if, [Tree(condition, [Token(VARIABLE, 'salary'), Token(ACTION_OPERATOR, '>'), Token(SIGNED_NUMBER, '100000')]), Tree(result, [Token(STRING, 'success')]), Tree(condition, [Token(VARIABLE, 'salary'), Token(ACTION_OPERATOR, '<'), Token(SIGNED_NUMBER, '50000')]), Tree(result, [Token(STRING, 'fail')]), Tree(else, [Token(STRING, 'get_more_info')])])]), Tree(else, [Token(STRING, 'fail')])])
我把它转换成字符串:
^{pr2}$我声明变量:
age = 20
salary = 60000
试着用
eval(code)
然后得到一个错误
File "<string>", line 1
if age > 18:
^
SyntaxError: invalid syntax
您将^{} 与{a2}混淆。在
eval()
用于表达式,例如False==True
:
^{pr2}$exec()
用于动态执行代码:输出:
您要找的是^{} 而不是{a2}:
exec
接受代码字符串或代码对象。而eval
接受一个表达式。在或者,您可以始终通过compiling预先计算代码字符串来计算(使用
^{pr2}$eval
)代码对象:为了好玩,您可以使用
eval
作为语法树,而无需编译代码,但代码必须有所不同:这利用了Python的ternary条件,从技术上讲,它仍然被视为一个表达式。在
相关问题 更多 >
编程相关推荐