otra - Determine si la variable está definida en Python
variables globales python (7)
Posible duplicado:
¿Una forma fácil de verificar que la variable está definida en python?
¿Cómo verifico si existe una variable en Python?
¿Cómo saber si una variable se ha establecido en un lugar particular en el código en tiempo de ejecución? Esto no siempre es obvio porque (1) la variable podría establecerse condicionalmente y (2) la variable podría eliminarse condicionalmente. Estoy buscando algo como defined()
en Perl o isset()
en PHP o defined?
en ruby
if condition:
a = 42
# is "a" defined here?
if other_condition:
del a
# is "a" defined here?
Creo que es mejor evitar la situación. Es más limpio y claro escribir:
a = None
if condition:
a = 42
Para este caso particular, es mejor hacer a = None
lugar de del a
. Esto disminuirá el recuento de referencias para objetar que se asignó (si corresponde) y no fallará cuando a
no esté definido. Tenga en cuenta que esa declaración no llama directamente al destructor de un objeto, sino que lo desvincula de la variable. Se llama destructor de objeto cuando el recuento de referencias se convierte en cero.
Si uno desea capturar los intentos de acceder a una variable no definida dentro de un objeto, hay una manera muy fácil de hacerlo:
class Whatever(object):
def __getattr__(self, key):
return None
Aquí, Python primero intenta encontrar un atributo dentro del objeto o el árbol de objetos, y solo si eso falla, se __getattr__(self, key)
la función __getattr__(self, key)
. Esto significa que, si se llama __getattr__
, simplemente podemos devolver None
.
Una posible situación donde esto podría ser necesario:
Si está utilizando el bloque finally
para cerrar las conexiones pero en el bloque try
, el programa sale con sys.exit()
antes de que se defina la conexión. En este caso, finally
llamará al bloque finally
y la declaración de cierre de la conexión fallará ya que no se creó ninguna conexión.
''a'' in vars() or ''a'' in globals()
Si quieres ser pedante, también puedes revisar los elementos incorporados.
''a'' in vars(__builtins__)
try:
a # does a exist in the current namespace
except NameError:
a = 10 # nope
try:
thevariable
except NameError:
print "well, it WASN''T defined after all!"
else:
print "sure, it was defined."