Determinare se la variabile è definita in Python [duplicare]
Domanda
Eventuali duplicati:
facile verificare che variabile è definita in Python?
Come posso controllare se una variabile esiste in Python?
Come si fa a sapere se una variabile è stata impostata in un posto particolare nel codice in fase di esecuzione? Questo non è sempre evidente perché (1) la variabile potrebbe essere condizionale impostata, e (2) la variabile potrebbe essere soppresso condizionale. Sto cercando qualcosa di simile defined()
in Perl o isset()
in PHP o defined?
in Ruby.
if condition:
a = 42
# is "a" defined here?
if other_condition:
del a
# is "a" defined here?
Soluzione
try:
thevariable
except NameError:
print("well, it WASN'T defined after all!")
else:
print("sure, it was defined.")
Altri suggerimenti
'a' in vars() or 'a' in globals()
se si vuole essere pignoli, è possibile controllare i comandi incorporati troppo
'a' in vars(__builtins__)
Credo che sia meglio evitare la situazione. È più pulito e più chiaro a scrivere:
a = None
if condition:
a = 42
try:
a # does a exist in the current namespace
except NameError:
a = 10 # nope
Una possibile situazione in cui questo potrebbe essere necessaria:
Se si utilizza blocco finally
per chiudere le connessioni, ma nel blocco try
, il programma esce con sys.exit()
prima che la connessione è definito. In questo caso, il blocco finally
sarà chiamato e la dichiarazione di chiusura connessione avrà esito negativo poiché nessun collegamento è stato creato.
Per questo caso particolare è meglio fare a = None
invece di del a
. Ciò decrementare conteggio riferimento all'oggetto a
era (se presente) assegnato e non mancherà quando a
non è definito. Si noti, che la dichiarazione del
non chiama distruttore di un oggetto direttamente, ma non associare dalla variabile. Distruttore di oggetto è chiamato quando conteggio dei riferimenti è diventato zero.