我有以下关于列表理解的代码。
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。
最佳答案
好问题,但是这段代码在 Python2.x
中运行良好,它会在 UnboundLocalError
中抛出 Python3.x
。
这是因为当您对 作用域 中的变量进行赋值时,该变量将成为该作用域的局部 并隐藏外部作用域 中任何类似命名的变量。由于它为 x 分配了一个新值,编译器将其识别为 局部变量 。因此,较早的变量尝试打印未初始化的局部变量并导致错误。
从 Why am I getting an UnboundLocalError when the variable has a value? 中查看更多详细信息。
关于python - UnboundLocalError : local variable 'y' referenced before assignment,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42579202/