x=5
print(eval('x+1',{'__builtins__': None}))
Run Code Online (Sandbox Code Playgroud)
得到错误:
TypeError: 'NoneType' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
为什么我会出错?
另外,如何只为eval()函数指定一些内置方法?例如,仅允许max和min功能.
值
__builtins__通常是此模块[builtins]或此模块__dict__属性的值
要修复错误:
>>> print(eval('x+1',{'__builtins__': {'x': x}}))
Run Code Online (Sandbox Code Playgroud)
要指定一些内置方法,请提供它 __builtins__
>>> print(eval('min(1,2)',{'__builtins__': {'min': min}}))
Run Code Online (Sandbox Code Playgroud)
但是,限制__builtins__仍然不安全:请参阅https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html