Python 导入的模块超出范围(未绑定本地错误)
我在一个python包中遇到了一个奇怪的“unboundlocal”错误,它似乎违反了所有逻辑。我无法得到一个MWE来复制它,但我将尝试简洁地解释,并希望有人能够提供一些正在发生的事情的解释 在本例中,Python 导入的模块超出范围(未绑定本地错误),python,scope,Python,Scope,我在一个python包中遇到了一个奇怪的“unboundlocal”错误,它似乎违反了所有逻辑。我无法得到一个MWE来复制它,但我将尝试简洁地解释,并希望有人能够提供一些正在发生的事情的解释 在本例中,模块是我开发的一个包,模型是模块中的一个类。Model类(Model.py)的定义如下所示: import module class Model: def __init__(self): print module def run(self): p
模块
是我开发的一个包,模型
是模块
中的一个类。Model
类(Model.py)的定义如下所示:
import module
class Model:
def __init__(self):
print module
def run(self):
print module
现在,当我在这样的脚本中实例化一个模型时:
from model import Model
m = Model()
m.run()
模块
在初始化
中成功打印,但在运行
函数中出现未绑定的本地错误
我试图用pdb诊断这一点,这是事情变得非常奇怪的地方,因为如果我在run()
函数的print module
行之前添加一个pdb跟踪,那么我可以成功运行print module
,而不会出现未绑定的本地错误,但如果我跳到下一行,它就会抛出错误。模块
如何在\uuuuu init\uuuuu()
的范围内和pdb的范围内,但不在运行()的范围内
我知道这并不理想,因为没有MWE,但我似乎无法在完整代码的上下文之外重现这一点。我希望有人能了解可能发生的情况,并提出一些进一步调试的策略。显然,在函数run
的某个地方有一个名为module
的局部变量。例如,以下代码将抛出UnboundLocalError
import sys
def run():
print sys
sys = None
run()
此处sys=None
引入了一个本地名称,该名称将导入的sys
隐藏在run
内部,在调用print
时,尚未定义该名称,因此出现错误。要在run
中使用导入的模块,必须查找并重命名局部变量。
关于python作用域规则的更多信息是您能给我们完整的堆栈跟踪吗?这将有助于诊断,以确保它是一个未绑定的地方,你认为它是。这不完全是它,但它确实让我找到了答案。run()块(不要问)中有一个“import module.function”调用,这似乎是问题的根源。一旦我找到它,很容易修复。。。谢谢