Got UnboundLocalError:在赋值之前引用的局部变量,但它不是

时间:2015-07-07 19:50:51

标签: python list variables

我完全难过了。我看了同样问题的其他答案,但似乎没有人给我一点点答案,为什么我自己得到这个错误。我有几个完全相同的程序运行相同的代码,除了从文件中读取的一些URL和产品ID。程序有点长,所以我把它们放在Pastebin Here上。我不指望你读取所有代码,错误发生在我定义PID的主函数中,然后尝试在函数中使用它。为什么一个工作完全正常而另一个不工作?据我所知,他们在那部分是相同的,但也许我错过了一些东西!任何帮助表示赞赏! 谢谢!

PS:我收到的错误是:

UnboundLocalError: Local variable 'PID' referenced before assignment

3 个答案:

答案 0 :(得分:1)

第202行的findall('CRC-START(.*?)CRC-END', PIDFile.read(), re.S)没有找到任何内容,PID没有被宣布,繁荣,UnboundLocalError

这是因为python解释器对代码进行了初步传递,将遇到的变量标记为本地,但它不会(也不能)检查声明它们的代码是否实际执行。 这种影响的最小可重复的例子是:

>>> def foo():
    if 0:
        a = 1
    print a


>>> foo()

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    foo()
  File "<pyshell#4>", line 4, in foo
    print a
UnboundLocalError: local variable 'a' referenced before assignment

答案 1 :(得分:0)

(Rep不够高,以及#39;评论&#39;)链接不起作用。你能提供代码摘录吗?

当您尝试在变量初始化(或根据您的代码定义)之前尝试使用变量时 - 当您尝试在范围之外使用变量时,会发生此错误。确保您的变量将由参考点初始化。我想知道你是否把它放在一个没有输入的if语句中......

答案 2 :(得分:0)

首先,似乎您在for循环的每次迭代中都将新列表重新分配给PID。最后,您的PID将仅包含最后的结果。

我认为你真正想做的是在for循环之前为PID分配一个空列表。也许在output = open(outputFile, 'w')之后,然后在每次迭代时将结果附加到PID。那么即使在PID.txt中找不到任何内容,也不会得到UnboundLocalError。