UnboundLocalError:赋值前引用的局部变量'y'

时间:2017-03-03 12:43:18

标签: python python-3.x

我在列表理解上有以下代码。

x = 2
y = 3

[x*y for x in range(x) for y in range(y)]

这给我以下错误

Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    [x*y for x in range(x) for y in range(y)]
  File "<pyshell#35>", line 1, in <listcomp>
    [x*y for x in range(x) for y in range(y)]
UnboundLocalError: local variable 'y' referenced before assignment

但是,下面的代码可以使用。

[x*y for x in range(x)]
[0, 5]

列表理解中的第二个for循环是否有任何范围规则?

我正在使用Python 3.6。

1 个答案:

答案 0 :(得分:1)

很好的问题,但是此代码在Python2.x中效果很好,并会在UnboundLocalError中抛出Python3.x

  

以前获取 UnboundLocalError 会令人感到意外   通过添加赋值语句修改它时的工作代码   在函数体中的某个地方。

这是因为当您对范围中的变量进行分配时,该变量将变为该范围的本地变量,并隐藏外部范围中任何类似命名的变量。由于它为x赋值,因此编译器将其识别为局部变量。因此,较早的变量尝试打印未初始化的局部变量并产生错误。

查看Why am I getting an UnboundLocalError when the variable has a value?的更多详情。