2017-03-03 11 views
2

Ich habe unten Code auf Listenverständnis.UnboundLocalError: lokale Variable 'y' referenziert vor Zuweisung

x = 2 
y = 3 

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

Dies gibt mir unter Fehler

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 

jedoch unter Code funktioniert.

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

Gibt es eine Scoping-Regel für die zweite for Schleife in Liste Verständnis?

Ich benutze Python 3.6.

+0

@Chris_Rands: der mögliche doppelte Post spricht nicht über UnboundLocalError und Scoping-Regel für das Verständnis der Liste. –

Antwort

1

Gute Frage, aber dieser Code funktioniert gut in Python2.x, und es wird UnboundLocalError in Python3.x werfen.

It can be a surprise to get the UnboundLocalError in previously working code when it is modified by adding an assignment statement somewhere in the body of a function.

Dies liegt daran, wenn Sie eine Zuordnung zu einer Variablen in einem Umfang machen, dass variable lokal für diesen Bereich wird und Schatten jeden ähnlich benannte Variable in dem äußeren Umfang. Da es x einen neuen Wert zuweist, erkennt der Compiler es als lokale Variable. Daher versucht die frühere Variable, die nicht initialisierte lokale Variable zu drucken, und es tritt ein Fehler auf.

Weitere Informationen finden Sie unter Why am I getting an UnboundLocalError when the variable has a value?.

+0

Ok, das bedeutet For Schleife hat einen lokalen Bereich in Listenverständnis? Nach meinem Verständnis für Schleife erstellt keinen lokalen Bereich, wenn auf Modulebene erstellt. –

Verwandte Themen