Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导入的模块超出范围(未绑定本地错误)_Python_Scope - Fatal编程技术网

Python 导入的模块超出范围(未绑定本地错误)

Python 导入的模块超出范围(未绑定本地错误),python,scope,Python,Scope,我在一个python包中遇到了一个奇怪的“unboundlocal”错误,它似乎违反了所有逻辑。我无法得到一个MWE来复制它,但我将尝试简洁地解释,并希望有人能够提供一些正在发生的事情的解释 在本例中,模块是我开发的一个包,模型是模块中的一个类。Model类(Model.py)的定义如下所示: import module class Model: def __init__(self): print module def run(self): p

我在一个python包中遇到了一个奇怪的“unboundlocal”错误,它似乎违反了所有逻辑。我无法得到一个MWE来复制它,但我将尝试简洁地解释,并希望有人能够提供一些正在发生的事情的解释

在本例中,
模块
是我开发的一个包,
模型
模块
中的一个类。
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”调用,这似乎是问题的根源。一旦我找到它,很容易修复。。。谢谢