¿Forma pythonica de comprobar si existe algo?

Esto es bastante básico, pero estaba progtwigndo y comencé a preguntarme si había una forma pythonica de comprobar si algo no existe. Así es como lo hago si es verdad:

var = 1 if var: print 'it exists' 

pero cuando verifico si algo no existe, a menudo hago algo como esto:

 var = 2 if var: print 'it exists' else: print 'nope it does not' 

Parece un desperdicio si lo único que me importa es que hay una manera de verificar si algo no existe sin la otra cosa.

Estilo LBYL, “mira antes de saltar”:

 var_exists = 'var' in locals() or 'var' in globals() 

Estilo EAFP, “más fácil pedir perdón que permiso”:

 try: var except NameError: var_exists = False else: var_exists = True 

Prefiere el segundo estilo (EAFP) al codificar en Python, ya que generalmente es más confiable.

Creo que debes tener cuidado con tu terminología, si algo existe y si algo se evalúa como Falso son dos cosas diferentes. Asumiendo que quieres lo último, puedes simplemente hacer:

 if not var: print 'var is False' 

Para el primero, sería el menos elegante:

 try: var except NameError: print 'var not defined' 

Sin embargo, voy a dar un salto y aventurarme, ya que todo lo que te hace querer comprobar si una variable está definida puede resolverse de una manera más elegante.

Si este es un diccionario, puedes tener

 mydict['ggg'] = '' // doesn't matter if it is empty value or not. if mydict.has_key('ggg'): print "OH GEESH" 

Sin embargo, has_key() se elimina completamente de Python 3.x, por lo tanto, la forma de Python es usar in

 'ggg' in mydict # this is it! # True if it exists # False if it doesn't 

También puede utilizar para tupla, lista y conjunto.


Por supuesto, si la variable no se ha definido, tendrá que lanzar una excepción de manera silenciosa (solo levante cualquier excepción … déjela pasar), si la excepción no es lo que quiere ver (lo cual es útil para muchas aplicaciones, solo necesitas registrar la excepción.)


Siempre es seguro definir una variable antes de usarla (se encontrará con “asignación antes de la referencia local”, lo que significa que “var no está en el scope” en inglés simple). Si haces algo con la consulta, existe la posibilidad de que desees tener un diccionario, y verificando si existe una clave o no, usar in .

Para comprobar si una var ha sido definida:

 var = 2 try: varz except NameError: print("No varz") 

Para comprobar si es Ninguno / Falso

 if varz is None 

…o

 if not varz 

¿Qué pasa con la negación?

 if not var: print 'nope it does not' 

Aunque esto es para ver si la var es falsa / ninguna y explotaría si var no está definida.

Para ver si var está definido:

 try: var except NameError: print 'not defined' 
 if not var: #Var is None/False/0/ if var: #Var is other then 'None/False/0' 

en Python si varibale tiene algún valor de Ninguno / Falso / 0, entonces la condición If var fallará …

y para otros objetos, llamará __nonzero__ método pythonico que puede devolver True o False según su funcionalidad.