Seite 1 von 1

Ist Variable gesetzt?

Verfasst: Mittwoch 22. September 2004, 06:38
von Stolzi
Ich habe wiedermal keine Antwort auf eine ganz simple Sache gefunden:
Wie prüfe ich in Python ob eine Variable initialisiert wurde? In PHP geschah das ja mit isset(), oder empty().
Genauso hat mich gewudert, dass ich zwar für ein Dic mit has_key prüfen kann ob der Wert gesetzt ist, aber für eine Liste habe ich nichts vergleichbares gefunden.
Bitte danke Aufklärung wenn möglich ;-)
Stolzi

Verfasst: Mittwoch 22. September 2004, 08:17
von querdenker
Teil Eins ist doch ganz einfach:

Code: Alles auswählen

try:
    if banane: print "set"
except NameError:
    print "unset"
Und Teil 2, mit der Liste.....
Wenn du wissen willst, ob ein Wert in der Liste ist :

Code: Alles auswählen

d=[33,44,55]
if 33 in d:
    print "Treffer"
Analog dazu , wenn d nicht vorhanden, reagierst du auf den NameError


MfG, querdenker

Verfasst: Mittwoch 22. September 2004, 08:32
von joe
Hi!
querdenker hat geschrieben:

Code: Alles auswählen

try:
    if banane: print "set"
except NameError:
    print "unset"
Und was machste, wenn banane == 0 ist? Dann ist die variable weder "set" noch "unset". Dann schon eher:

Code: Alles auswählen

try:
    banane
    print "set"
except NameError:
    print "unset"
    
Joe

Verfasst: Mittwoch 22. September 2004, 10:55
von querdenker
Stimmt.
Das kommt davon, wenn man morgens noch keinen Kaffee hatte

mfg, querdenker

Verfasst: Mittwoch 22. September 2004, 11:41
von Dookie
Hi,

ich würd das eher so machen:

Code: Alles auswählen

if "banane" in locals():
    print "banane is set!"
else:
    print "banane is not set!"
Gruß

Dookie

Verfasst: Mittwoch 22. September 2004, 15:35
von Milan
Hi. Und ich würde noch zusätzlich in globals suchen :wink: . Aber die variante finde ich besser, man kann auch Namen suchen, die selber in Variablen stehen :) .

Verfasst: Sonntag 3. Oktober 2004, 11:10
von Leonidas
Ja die try variante ist echt besser, denn variablen sind an sehr verschiedenen orten zu finden. Im ASPN Python Cookbook gibts dazu auch ein Rezept.

Verfasst: Sonntag 3. Oktober 2004, 12:02
von Milan
Leonidas hat geschrieben:Ja die try variante ist echt besser...
Hab ich nicht geschrieben :wink: . Wenn man einen festen Namen sucht, mag das zutreffen, aber ich bevorzuge locals und globals. Dann kann ich den Variablennamen selbst in einer Variablen speichern:

Code: Alles auswählen

name_ges="test"
test="12345 hallo"
if name_ges in locals():
    print "gesetzt:",locals()[name_ges]
elif name_ges in globals():
    print "gesetzt:",globals()[name_ges]
else:
    print "ungesetzt"
So hast du den Vorteil, event. viele Variablen gleichzeitig in einer for-Schleife suchen zu können. Ich wüsste auch nicht, wo die wenn noch vorkommen sollten, wenn sie weder global noch lokal sind...

Verfasst: Dienstag 5. Oktober 2004, 12:38
von Leonidas
Milan hat geschrieben:So hast du den Vorteil, event. viele Variablen gleichzeitig in einer for-Schleife suchen zu können. Ich wüsste auch nicht, wo die wenn noch vorkommen sollten, wenn sie weder global noch lokal sind...
Zukünftige Python versionen?
Auf jeden Fall hier noch das Rezept: http://aspn.activestate.com/ASPN/Cookbo ... cipe/59892

Verfasst: Dienstag 5. Oktober 2004, 17:38
von Milan
Leonidas hat geschrieben:Zukünftige Python versionen?
Auf jeden Fall hier noch das Rezept: http://aspn.activestate.com/ASPN/Cookbo ... cipe/59892
Dann kann man dnn aber den Docu Teil "Porting to Python X.Y" lesen. Mir ist dafür ein sinnvolles Beispiel eingefallen, um dir mal ein wenig recht zu geben: Wenn ich in Klassen ein Attribut aufrufen will, wird es nicht als self.xyz in locals oder globals stehen (dann muss hasattr ran). Trotzdem bleib ich dabei, es gibt meiner Meinung nach keinen sinnvollen Weg mit try dynamisch Namen zu überprüfen und auszulesen. :roll:

mfg Milan

Verfasst: Donnerstag 7. Oktober 2004, 12:31
von Leonidas
Milan hat geschrieben:Dann kann man dnn aber den Docu Teil "Porting to Python X.Y" lesen.
Ja, das kann man. Aber erstmal wundert man sich lange bis es geht und zweitens weis der end user das ja nicht, kann also es nicht ändern und verschiebt dein prog nach /dev/null.