相关疑难解决方法(0)

在Python中解析用户提供的数学公式的安全方法

是否有Python的数学表达式解析器+评估器?

我不是第一个提出这个问题的人,但答案通常指向eval().例如,人们可以这样做:

>>> safe_list = ['math','acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'abs']
>>> safe_dict = dict([ (k, locals().get(k, None)) for k in safe_list ])
>>> s = "2+3"
>>> eval(s, {"__builtins__":None}, safe_dict)
5
Run Code Online (Sandbox Code Playgroud)

但这不安全:

>>> s_badbaduser = """
... (lambda fc=(
...     lambda n: [
...         c for c in 
...             ().__class__.__bases__[0].__subclasses__() 
...             if c.__name__ …
Run Code Online (Sandbox Code Playgroud)

python

24
推荐指数
2
解决办法
4128
查看次数

标签 统计

python ×1