您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

指定本地人时,为什么Python 3 exec()失败?

指定本地人时,为什么Python 3 exec()失败?

exec()文档中

请记住,在模块级别,全局变量和局部变量是相同的字典。如果exec获取两个单独的对象作为 globalslocals ,则代码将像嵌入在类定义中一样执行。

您传入了两个单独的字典,但是尝试执行需要模块范围全局变量可用的代码import math一个类中将产生一个 局部作用域属性 ,并且您创建的函数将无法访问该 属性 ,因为函数闭包不考虑类作用域名称

请参阅Python执行模型参考中的命名和绑定

类定义块和参数exec(),并eval()名称解析的情况下特别。类定义是可以使用和定义名称的可执行语句。这些引用遵循通常的名称解析规则,但在全局命名空间中查找未绑定的局部变量。类定义名称空间成为该类的属性字典。在类块中定义的名称范围仅限于该类块。它不会扩展到方法[。]的代码

您可以通过尝试在类定义中执行代码来重现错误

>>> class Demo:
...     import math
...     def func(x):
...         return math.sin(x)
...     func(10)
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in Demo
  File "<stdin>", line 4, in func
NameError: name 'math' is not defined

只需传递 本字典。

python 2022/1/1 18:35:27 有266人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶