首页 > 解决方案 > 为什么我不能直接使用 eval(entire_string),为什么我需要使用 parser.expr(entire_string).compile()?

问题描述

使用 Tkinter 构建计算器的源代码

parser.expr(entire_string).compile() VS eval(entire_string)
版本1:

import parser
entire_string = '1+2'
a = parser.expr(entire_string).compile()
result = eval(a)

版本2:

entire_string = '1+2'
result = eval(entire_string)

使用有什么意义parser.expr(entire_string).compile(),为什么不eval(entire_string)直接使用呢?

标签: pythonpython-3.xeval

解决方案


这是因为 python 中的 eval 是危险的。如果字符串是由用户输入的,那么他们可以在您的机器上执行任意代码。如果它在远程服务器上运行,这尤其危险。

解析器将只解析一个表达式并返回一个值,而不允许运行任意 python 代码。


推荐阅读