local variable 'pos1' referenced before assignment

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nicolasroth01
User
Beiträge: 5
Registriert: Samstag 20. Januar 2018, 23:51

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)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Antworten