python - 为什么我不能直接使用 eval(entire_string),为什么我需要使用 parser.expr(entire_string).compile()?
问题描述
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)
直接使用呢?
解决方案
这是因为 python 中的 eval 是危险的。如果字符串是由用户输入的,那么他们可以在您的机器上执行任意代码。如果它在远程服务器上运行,这尤其危险。
解析器将只解析一个表达式并返回一个值,而不允许运行任意 python 代码。
推荐阅读
- sql - Oracle:查找具有特定权限的所有用户
- bash - 获取带有用户名密码的 url 的 http 响应代码
- python - 是否可以从下到上而不是从上到下将小部件添加到 kivy 中的网格布局
- ruby-on-rails - 如何在 Rails 中使用一个提交按钮实现多表单
- javascript - 使用 vuejs 时 for 循环出现问题
- git - 我的 Google AppEngine 部署失败。我怎样才能恢复?
- bash - 为什么这个脚本可以在机器上运行一个而不是另一个?macOS 卡塔利娜
- android - 导航抽屉 - 为片段添加标签
- r - 从多元法线加速嵌套绘制,其中每个绘制在 r 中具有不同的平均向量
- java - 创建通知通道(React Native)