Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python评估错误_Python - Fatal编程技术网

Python评估错误

Python评估错误,python,Python,获取错误: x=5 print(eval('x+1',{'__builtins__': None})) 为什么我会犯以上的错误 另外,如何只为eval()函数指定几个内置方法?例如,只允许max和min功能。一种可能的解决方案是让当前全局端清除内置端 TypeError: 'NoneType' object is not subscriptable 从 \uuuuuuuuuuuuu内置项的值通常是此模块的值或此模块的\uuuuuuuu dict\uuuuuu属性的值 要修复错误,请执行以下操

获取错误:

x=5
print(eval('x+1',{'__builtins__': None}))
为什么我会犯以上的错误


另外,如何只为eval()函数指定几个内置方法?例如,只允许
max
min
功能。

一种可能的解决方案是让当前全局端清除内置端

TypeError: 'NoneType' object is not subscriptable

\uuuuuuuuuuuuu内置项的值通常是此模块的值或此模块的
\uuuuuuuu dict\uuuuuu
属性的值

要修复错误,请执行以下操作:

x=5
dictionary = globals()
dictionary['__builtins__'] = None
print(eval('x+1',dictionary))
要指定一些内置方法,请将其提供给
\uuu内置\uuu

>>> print(eval('x+1',{'__builtins__': {'x': x}}))
但是,限制
\uuuuuuuuuuuuuuuuuuuuuuu内置\uuuuuuuuuu
仍然不安全:请参阅

为什么我会犯以上的错误

Python试图在您提供的内置代码中查找名称
'x'
,但失败如下:

>>> print(eval('min(1,2)',{'__builtins__': {'min': min}}))
您还需要在范围中包括
x

>>> None['x']
TypeError: 'NoneType' object is not subscriptable
如何仅为
eval()函数指定几个内置方法


你不能用这种方式沙箱。例如,通过对文本的属性访问,总是可以逃逸沙箱。

这也是为什么不定义“x”的原因,如果您这样做:

>>> x = 5
>>> eval('x+1', {'__builtins__': None, 'x': x})
6
您得到:
NameError:name“x”未定义
,因为您覆盖了所有上下文

但如果你这么做:

x=5
print(eval("x+1",{'__builtins__': __builtins__}))
将打印“6”,但将使用所有内置函数,可能您只想执行以下操作:

x=5
print(eval("x+1"))

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
通常是一个模块。没有理由说它“应该”是一本字典。这是传递给
eval
的第二个参数,它应该是一个字典。
x=5
print(eval("x+1",{'__builtins__': {'min': min, 'max': max, 'x': x}}))