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?
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top