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

标签 python eval string-parsing

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

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

整个 StackOverflow 的线程都建议使用 SymPy 的 evalf()

作为 Python 新手,我无法真正说服自己 evalf() 是安全的,因为我缺乏相关技能。谁能详细说明 evalf() 的作用(不同)?

最佳答案

python eval 和 sympy evalf 没有任何共同点(后者用于计算 sympy 表达式树的数值,它没有 与解析有关,而 eval 是关于解析字符串并将其作为代码进行评估)。

另一方面,sympifyeval 一样危险,因为它实际上使用了 eval

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

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

  • sympify("some_text") 将几乎直接通过 eval 解析文本(搜索来自 sympy.parsing 的导入出现在 sympify 中并遵循它)。它更安全,因为有一些限制,但它不安全

关于python - SymPy 的 sympify(<string>).evalf() 有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16718644/

相关文章:

Python循环遍历CSS文件中的所有url并替换

lisp - 为什么 LET 在我的 quine 中不能与 EVAL 一起玩?

java - 使用Java和正则表达式来修复路径

python - 创建最小值列表时拒绝零值。 (Python字段计算器)

python - Python-测试错误

c++ - 如何在 Python ctypes 中处理 C++ 返回类型 std::vector<int>?

eval - tensorflow : one hot encoding

javascript - 将嵌套数组转换为对象

c# - 取字符串的最后n行c#

c# - 将带有分隔符的字符串解析为字典