2016-06-21 49 views
1

我在python包中看到一个奇怪的“未绑定本地”错误,似乎违反所有逻辑。我不能让MWE重现它,但会试图简洁地解释,并希望有人能够提供一些解释。导入的模块超出范围(未绑定的本地错误)

为了这个例子module是我开发的包,Modelmodule中的一个类。在Model类(model.py)的定义是这样的:

import module 

class Model: 
    def __init__(self): 
     print module 

    def run(self): 
     print module 

现在,当我在这样的脚本实例化一个Model:在__init__

from model import Model 
m = Model() 
m.run() 

module成功打印,但我在run函数中获得未绑定的本地错误。

我试图用PDB,这就是事情变得很奇怪诊断这一点,因为如果我添加一个PDB跟踪前夕在run()功能print module线,那么我可以成功运行print module没有绑定本地错误,但如果我走到下一行,则会抛出错误。 module如何在__init__()的范围内,并在pdb的范围内,但不在run()的范围内?

我知道这是不理想的,因为没有MWE,但我似乎无法在完整代码的上下文之外重现此内容。我希望有人能够了解可能发生的事情并提出一些进一步调试的策略。

+0

你能给我们完整的堆栈跟踪吗?这将有助于诊断,以确保它是一个你认为它是未绑定的本地。 – Delioth

回答

3

显然你有一个名为module的函数run中某处的局部变量。例如,下面的代码会抛出UnboundLocalError

import sys 

def run(): 
    print sys 
    sys = None 
run() 

这里sys = None介绍尚未定义的阴影里面run和当时print调用它的进口sys一个本地名称,因此错误。要在run内使用导入的模块,您必须查找并重命名本地变量。 python范围规则的更多信息是here

+0

这不完全是这样,但它确实使我找到了答案。在run()块内有一个“import module.function”调用(不要问),这似乎是问题的根源。一旦我找到它,轻松修复...谢谢! –