Python-Geltungsbereich von Variablen-Fehler

Der folgende code funktioniert wie erwartet, sowohl Python 2.5 und 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()

Allerdings, wenn ich die Auskommentierung Zeile (B), bekomme ich eine UnboundLocalError: 'c' not assigned in Zeile (A). Die Werte der a und b sind korrekt gedruckt. Das hat mich völlig verblüfft aus zwei Gründen:

  1. Warum gibt es einen runtime-error geworfen in Zeile (A), weil eine spätere Anweisung in Zeile (B)?
  2. Warum sind Variablen, die a und b gedruckt, wie erwartet, während c löst einen Fehler aus?

Die einzige Erklärung, die ich mit oben kommen kann ist, dass ein lokalen variable c entsteht durch die Zuordnung c+=1, die den Vorrang über die "Globale" variable c noch bevor die lokale variable erstellt. Natürlich ist es nicht sinnvoll, eine variable zu "stehlen" Bereich, bevor es existiert.

Könnte jemand bitte erklären Sie dieses Verhalten?

InformationsquelleAutor tba | 2008-12-16

Schreibe einen Kommentar