Pregunta

  

Duplicar posibles:
   manera fácil de comprobar que la variable se define en Python?
   ¿Cómo puedo comprobar si existe una variable en Python?

¿Cómo saber si una variable se ha fijado en un lugar determinado en el código en tiempo de ejecución? Esto no siempre es evidente, porque (1) la variable se puede establecer de forma condicional, y (2) la variable podría suprimirse de forma condicional. Busco algo así como defined() en Perl o PHP o isset() en defined? en Ruby.

if condition:
    a = 42

# is "a" defined here?

if other_condition:
    del a

# is "a" defined here?
¿Fue útil?

Solución

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

Otros consejos

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

si desea ser pedante, puede comprobar las órdenes internas también
'a' in vars(__builtins__)

Creo que es mejor evitar la situación. Es más limpio y más claro a escribir:

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

Una posible situación en que esto podría ser necesaria:

Si está utilizando el bloque de conexiones cercanas finally pero en el bloque try, el programa se cierra con sys.exit() antes de que la conexión se define. En este caso, el bloque finally será llamado y la declaración de cierre conexión fallará desde que se creó ninguna conexión.

En este caso particular, es mejor que hacer a = None en lugar de del a. Esta voluntad cómputo de referencia de decremento a a objeto era (si lo hay) asignado a y no fallar cuando a no está definido. Tenga en cuenta, que la declaración del no llama destructor de un objeto directamente, sino desvincularla de variable. Destructor del objeto se llama cuando el recuento de referencia se convirtió en cero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top