webentwicklung-frage-antwort-db.com.de

Bestimmen Sie, ob die Variable in Python definiert ist.

Mögliches Duplikat:
Einfache Möglichkeit, zu überprüfen, ob die Variable in Python definiert ist?
Wie überprüfe ich, ob eine Variable in Python existiert?

Woher wissen Sie, ob eine Variable zur Laufzeit an einer bestimmten Stelle im Code gesetzt wurde? Dies ist nicht immer offensichtlich, da (1) die Variable bedingt gesetzt und (2) die Variable bedingt gelöscht werden kann. Ich suche nach etwas wie defined() in Perl oder isset() in PHP oder defined? in Ruby.

if condition:
    a = 42

# is "a" defined here?

if other_condition:
    del a

# is "a" defined here?
367
user102008
try:
  thevariable
except NameError:
  print "well, it WASN'T defined after all!"
else:
  print "sure, it was defined."
574
Alex Martelli

'a' in vars() or 'a' in globals()

wenn Sie pedantisch sein möchten, können Sie auch die eingebauten Funktionen überprüfen
'a' in vars(__builtins__)

312
John La Rooy

Ich denke, es ist besser, die Situation zu vermeiden. Es ist sauberer und klarer zu schreiben:

a = None
if condition:
    a = 42
117
divegeek
try:
    a # does a exist in the current namespace
except NameError:
    a = 10 # nope
15
sc45

Eine mögliche Situation, in der dies erforderlich sein könnte:

Wenn Sie den Block finally zum Schließen von Verbindungen verwenden, sich jedoch im Block try befinden, wird das Programm mit sys.exit() beendet, bevor die Verbindung definiert wird. In diesem Fall wird der Block finally aufgerufen und die Anweisung zum Schließen der Verbindung schlägt fehl, da keine Verbindung erstellt wurde.

5
xsreality

In diesem speziellen Fall ist es besser, a = None anstelle von del a auszuführen. Dadurch wird der Referenzzähler auf das Objekt a verringert, das (falls vorhanden) zugewiesen wurde, und es schlägt nicht fehl, wenn a nicht definiert ist. Beachten Sie, dass die del -Anweisung den Destruktor eines Objekts nicht direkt aufruft, sondern die Bindung von der Variablen aufhebt. Der Destruktor des Objekts wird aufgerufen, wenn der Referenzzähler Null wurde.

4
Denis Otkidach