stringExp = "2^4"
intVal = int(stringExp) # Expected value: 16
这将返回以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int()
with base 10: '2^4'
我知道eval
可以解决这个问题,但难道没有一种更好、更重要、更安全的方法来计算存储在字符串中的数学表达式吗?
Tags:
Pyparsing可用于解析数学表达式。尤其是fourFn.py 演示如何解析基本算术表达式。下面,我将fourFn重写为一个数值解析器类,以便于重用。
你可以这样用
一些比} *更安全的选择:
eval()
和^{根据文档中的以下警告,*SymPy^{} 也不安全。
eval
是邪恶的注意:即使使用set
__builtins__
到None
,仍然可能使用内省来中断:使用
ast
评估算术表达式您可以轻松地限制每个操作或任何中间结果的允许范围,例如限制
a**b
的输入参数:或限制中间结果的大小:
示例
相关问题 更多 >
编程相关推荐