Ist Variable gesetzt?

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.
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Ist Variable gesetzt?

Beitragvon Stolzi » Mittwoch 22. September 2004, 06:38

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
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Beitragvon querdenker » Mittwoch 22. September 2004, 08:17

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
joe

Beitragvon joe » Mittwoch 22. September 2004, 08:32

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
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Beitragvon querdenker » Mittwoch 22. September 2004, 10:55

Stimmt.
Das kommt davon, wenn man morgens noch keinen Kaffee hatte

mfg, querdenker
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 22. September 2004, 11:41

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

Code: Alles auswählen

#!/usr/bin/env python
import this
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Mittwoch 22. September 2004, 15:35

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 :) .
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 3. Oktober 2004, 11:10

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Sonntag 3. Oktober 2004, 12:02

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...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 5. Oktober 2004, 12:38

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
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Dienstag 5. Oktober 2004, 17:38

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 7. Oktober 2004, 12:31

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], kl.as, Sirius3, WhiteyW