Anfängerfrage: "UnboundLocalError: local variable 'var' referenced before assignment"

21/12/2007 - 16:32 von Mario Nette | Report spam
Hi,
Hab vor ein paar Tagen, angefangen mit Python zu programmieren.
Bei einer Sache komm ich allerdings nicht weiter:
Warum würde ein Solches Bsp nicht von funktionieren:

var = 0
def funktion():
var =var +1

funk()
print var


Fehlermeldung:
UnboundLocalError: local variable 'var' referenced before assignment

Wie kann ich das Problem umgehen ?
Ich hoffe ihr könnt mir helfen.

mit weihnachtlichen Grüßen,
Mario
 

Lesen sie die antworten

#1 Martin Blume
21/12/2007 - 17:36 | Warnen spam
"'Mario Nette'" schrieb
Hab vor ein paar Tagen, angefangen mit Python
zu programmieren.
Bei einer Sache komm ich allerdings nicht weiter:
Warum würde ein Solches Bsp nicht von funktionieren:

var = 0
def funktion():
var =var +1

funk()
print var


Fehlermeldung:
UnboundLocalError: local variable 'var'
referenced before assignment

Wie kann ich das Problem umgehen ?
Ich hoffe ihr könnt mir helfen.




Das ist eine IMHO etwas unglückliche Eigenschaft von Python:
- wenn Du var nur referenzierst (rechts vom Gleichheitszeichen
brauchhst), wird automatisch angenommen, dass Du die globale
Variable var brauchst.
- wenn Du die globale Variable var veraendern willst, musst
Du mit "global var" die Variable var als global deklarieren

Unglücklich deshalb, weil das Verhalten meines Erachtens nicht
gerade offensichtlich ist.

Probier mal folgenden Code aus:
varB
def f1():
print "var ", var


def f2():
global var
var = var * 2
print var

def f3():
var = var + 2
print var


f1()
f2()
f3()

und studier die Dokumentation betreffs globaler Variablen.
Besser noch: brauch solche nie, denn obwohl sehr praktisch,
kommst Du über kurz oder lang (eher kurz) in Teufel's Küche,
da schnell die Übersicht verloren geht, wo an welcher Variable
gedreht wird.


HTH.
Martin

Ähnliche fragen