Seite 1 von 1

local variable 'pos1' referenced before assignment

Verfasst: Sonntag 21. Januar 2018, 00:00
von nicolasroth01
Hi, bin neu in Python und habe mich ein bisschen mit if-Abfragen beschäftigt. Allerdings habe ich ein Problem, in der Funktion add(neuerInhalt) will ich zuerst abfragen, ob die Position 1 (pos1) leer ist und diese dann mit dem neuen Inhalt überschreiben. Doch es gibt mir immer die Fehlermeldung "local variable 'pos1' referenced before assignment" aus. Sobald ich die Zeile hinter dem "if pos1 =="leer":" entferne, bekomme ich keine Fehlermeldung. Woran liegt das?

Code: Alles auswählen

pos1 = "leer"

def find(inhalt):
    if pos1 == inhalt:
        print("Found at Position 1")

    else:
        print("not found")

def add(neuerInhalt):
    if pos1 == "leer":
        pos1 = neuerInhalt
        
    
find(5)
add(5)

Re: local variable 'pos1' referenced before assignment

Verfasst: Sonntag 21. Januar 2018, 09:11
von Sirius3
@nicolasroth01: alles, was nur gelesen wird ist global; alle Variablen einer Funktion, die geändert werden sind lokal. Bevor die Variable einen Wert bekommt, existiert sie noch nicht, daher die Fehlermeldung. Vielleicht sagt Dir jemand einen Trick, wie man das doch so hinbekommt, wie Du jetzt denkst, das führt aber später nur zu großen Problemen.

Die Namen `pos1`, `find` und `add` lassen befürchten, dass Du versuchst eine Liste nachzuprogrammieren und zwar mit einzelnen Variablen. Nimm besser eine Liste.

Re: local variable 'pos1' referenced before assignment

Verfasst: Sonntag 21. Januar 2018, 10:24
von noisefloor
Hallo,

@nicolasroth01: Deine Funktionsnamen sind auch irreführend. `find` sucht nicht, sondern macht einen simplen Vergleich von zwei Variablen, wobei die Variablen Strings sein müssen. `add` addiert nichts bzw. fügt etwas hinzu, sondern ersetzt etwas. hier wäre `replace` der bessere Name.

Wie Sirius3 auch schon fragte: was ist der Sinn des ganzen bzw. was ist das Ziel?

Gruß, noisefloor