Python:在'exec'环境中奇怪的“NameError:name ...未定义”

时间:2015-04-30 23:12:32

标签: python python-3.x

我有信心至少对Python的范围系统有一些基本的了解。现在我收到一个错误,遗憾的是到目前为止我甚至无法为复制编写好的代码片段。我试图在一个新的小项目中重现它,但一切都按照我的预期运行: - /

我只能描述我的所作所为,并希望有人能够检测到某种模式并告诉我这里可能出现的问题。

首先有一个python文件x.py,它实现了一个类X

在其他一些python文件中,有以下字符串:

code="""
...
from x import X
...
class Y(X): # does not crash here, ...
    def __init__(self):
        X.__init__(self) # ... but here
        ...
foo=Y()
"""

您可以假设python能够找到x模块。在某个地方,我尝试执行:

exec(code, globals(), locals())

现在我得到了NameError。它告诉我,X在尝试调用它的构造函数时没有定义。它显然定义在上面几行。

如果我通过添加Y.__init__作为第一行修改from x import X,则可行。但为什么我要在那里再次导入呢?

如前所述,实际代码更复杂,做的更多。在一个不幸的情况下,我的帖子甚至没有显示实际导致问题的部分。但也许你有一些一般的想法,如何能够得到这样的行为。

0 个答案:

没有答案