首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python计算错误

Python计算错误
EN

Stack Overflow用户
提问于 2018-08-03 02:16:52
回答 2查看 427关注 0票数 2
代码语言:javascript
复制
x=5
print(eval('x+1',{'__builtins__': None}))

获取错误:

代码语言:javascript
复制
TypeError: 'NoneType' object is not subscriptable

为什么我会得到上面的错误?

另外,如何为eval()函数指定几个内置方法呢?例如,仅允许maxmin函数。

EN

回答 2

Stack Overflow用户

发布于 2018-08-03 02:23:06

一种可能的解决方案是让当前的全局变量清空内建

代码语言:javascript
复制
x=5
dictionary = globals()
dictionary['__builtins__'] = None
print(eval('x+1',dictionary))
票数 0
EN

Stack Overflow用户

发布于 2018-08-03 02:28:20

这也是为什么你不会被定义为'x‘的原因:

代码语言:javascript
复制
x=5
print(eval("x+1",{'__builtins__': __builtins__}))

你会得到:NameError: name 'x' is not defined,因为你覆盖了所有的上下文。

但如果你就这么做了:

代码语言:javascript
复制
x=5
print(eval("x+1"))

将打印'6‘,但将使用所有的内置函数,可能你只想这样做:

代码语言:javascript
复制
x=5
print(eval("x+1",{'__builtins__': {'min': min, 'max': max, 'x': x}}))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51659933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档