Python:UnboundLocalError帮助:赋值前引用的局部变量

Python:UnboundLocalError帮助:赋值前引用的局部变量,python,multithreading,Python,Multithreading,我的一部分代码不断出现这个错误 Traceback (most recent call last): File "./mang.py", line 1688, in <module> files, tsize = logger() File "./mang.py", line 1466, in logger nl = sshfile(list, "nl") UnboundLocalError: local variable 'sshfile' referenced before as

我的一部分代码不断出现这个错误

Traceback (most recent call last):
File "./mang.py", line 1688, in <module>
files, tsize = logger()
File "./mang.py", line 1466, in logger
nl = sshfile(list, "nl")
UnboundLocalError: local variable 'sshfile' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“/mang.py”,第1688行,在
文件,tsize=logger()
文件“/mang.py”,第1466行,在记录器中
nl=sshfile(列表,“nl”)
UnboundLocalError:赋值前引用的局部变量“sshfile”

我没有把代码放上去,因为它在函数之间来回移动。我想知道是否有人能告诉我为什么python会抛出这个错误?sshfile不是一个变量,它是一个类。

您可能尚未导入包含
sshfile
定义的文件,或者您需要用包名限定类名。这取决于你是如何导入的

它是什么包装的?它的定义是什么


更新

对于阅读本文的其他人,在评论中进行讨论后,发现问题在于名称
sshfile
在函数中被进一步用作变量名,如下所示:

class sshfile:
    pass

def a():
    f = sshfile() # UnboundLocalError here
    sshfile = 0

a()

解决方案是不要使用隐藏需要使用的类名的变量名。

如果您不想胡乱猜测,则必须至少发布部分代码。如果使用该类定义的范围内不存在该类定义,Python会将其称为局部变量。所以问题是,不知何故,类定义没有发生。它定义在logger函数的正下方。它不是软件包的一部分,而是我编写的一个函数。我不知道你所说的限定类名是什么意思。在我做了一些修改之前,这个代码一直工作得很好,但我从未接触过代码的这一部分。这是你编写的函数?在你说这是一门课之前。如果您可以将相关的代码行提取到一个新文件中,或者制作一个10行最简单的自包含示例来演示错误,并发布该示例,那么这将非常有用。删除所有不需要证明错误的代码。@Incognito:那么错误就在另一个代码中。用这个做个例子。找出您需要添加/删除的代码的哪一部分以使错误发生和消失。找出问题所在的那一行可能需要一段时间,但这比我们在看不到代码的情况下随机猜测要快得多。@Incognito:创建一个包含完整代码的新文件。运行它并验证错误是否存在。现在删除所有未使用的代码。再次运行它并确认错误仍然存在。现在删除更多代码(或用更简单的代码替换,例如用
x=foo(bar)
替换为
x=0
),验证。去除验证如果删除代码后错误消失,请将代码放回原处并尝试删除其他内容。一旦你有了一些代码,如果不纠正错误,就不能删除任何一行,请在这里发布。好的!我发现了错误所在。非常愚蠢的一个,我不小心在下面创建了一个与sshfile类同名的变量。