SymPy的sympify(<string>).evalf()有多安全?

2024-05-19 20:27:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我们知道Python的eval()是邪恶的

http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

StackOverflow中的线程建议使用SymPy的evalf()。在

作为一个Python新手,我无法真正说服自己evalf()是安全的,因为我缺乏技能。有人能详细说明evalf()做了什么(不同)?在


Tags: comhttpishtmlevalblogstackoverflow线程
1条回答
网友
1楼 · 发布于 2024-05-19 20:27:31

python eval和sympy evalf之间没有任何共同之处(后者用于计算sympy表达式树的数值,它与解析无关,而eval则是对字符串进行分析并将其当作代码进行计算)。在

另一方面,sympify和{}一样危险,因为它实际上使用eval。在

使用sympify的基本模式有两种,它们混合在同一个函数中可能是个坏主意:

  • sympify(some_object)将返回更适合在CAS中使用的对象的表示形式,例如将int(1)转换为sympy.Integer(1)

  • sympify("some_text")几乎直接通过eval解析文本(搜索eval中存在的sympy.parsing的导入并跟随它)。因为有一些限制,所以比较安全,但它不安全。

相关问题 更多 >