Der folgende Code funktioniert wie erwartet sowohl in Python 2.5 als auch in 3.0:
a, b, c = (1, 2, 3)
print(a, b, c)
def test():
print(a)
print(b)
print(c) # (A)
#c+=1 # (B)
test()
Wenn ich jedoch die Zeile (B) erhalte ich eine UnboundLocalError: 'c' not assigned
auf der Linie (A) . Die Werte von a
et b
korrekt gedruckt werden. Das hat mich aus zwei Gründen völlig verwirrt:
-
Warum wird ein Laufzeitfehler in der Zeile (A) wegen einer späteren Aussage in der Zeile (B) ?
-
Warum sind Variablen
a
etb
wie erwartet gedruckt, währendc
einen Fehler auslöst?
Die einzige Erklärung, die mir einfällt, ist, dass ein . variabel c
wird durch den Auftrag c+=1
die Vorrang vor der "globalen" Variable hat c
noch bevor die lokale Variable erstellt wird. Natürlich ist es nicht sinnvoll, dass eine Variable den Geltungsbereich "stiehlt", bevor sie existiert.
Könnte mir jemand dieses Verhalten erklären?
0 Stimmen
Ist damit Ihre Frage beantwortet? Ich verstehe nicht, warum UnboundLocalError auftritt (Schließung)
1 Stimmen
Gleicher Fehler, aber andere Ursache: "UnboundLocalError: lokale Variable vor Zuweisung referenziert" nach einer if-Anweisung