Frage

  

Mögliche Duplizieren:
   Einfache Möglichkeit, diese Variable zu überprüfen, ist in Python definiert?
   Wie kann ich überprüfen, ob eine Variable in Python existiert?

Wie wissen Sie, ob eine Variable Satz an einer bestimmten Stelle im Code zur Laufzeit gewesen ist? Dies ist nicht immer offensichtlich, weil (1) die Variablen bedingt gesetzt werden könnten, und (2) die Variable bedingt gelöscht werden kann. Ich bin auf der Suche nach so 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?
War es hilfreich?

Lösung

try:
    thevariable
except NameError:
    print("well, it WASN'T defined after all!")
else:
    print("sure, it was defined.")

Andere Tipps

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

Wenn Sie pedantisch sein wollen, können Sie die eingebauten Funktionen überprüfen
'a' in vars(__builtins__)

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

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

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

Wenn Sie finally Block zu enge Verbindungen verwenden, aber im try Block, endet das Programm mit sys.exit() vor der Verbindung definiert ist. In diesem Fall werden die finally Baustein aufgerufen und die Verbindung Abschlusserklärung wird fehlschlagen, da keine Verbindung erstellt wurde.

Für diesen speziellen Fall ist es besser, a = None statt del a zu tun. Dies wird Abnahmereferenzzähler Objekt a war (falls vorhanden) zugeordnet und wird nicht fehlschlagen, wenn a nicht definiert ist. Beachten Sie, dass del Anweisung ruft nicht destructor ein Objekt direkt, sondern unbind es von Variablen. Destructor des Objekts aufgerufen wird, wenn Referenzzähler Null geworden ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top