try - raise python




¿Cómo verifico si existe una variable? (7)

Quiero comprobar si existe una variable. Ahora estoy haciendo algo como esto:

try:
   myVar
except NameError:
   # Do something.

¿Hay otras formas sin excepciones?


El uso de variables que no se han definido o establecido (implícita o explícitamente) es casi siempre algo malo en cualquier lenguaje, ya que indica que la lógica del programa no se ha pensado correctamente y es probable que resulte impredecible. comportamiento.

El siguiente truco, que es similar al suyo, garantizará que una variable tenga algún valor antes de usarla:

try:
    myVar
except NameError:
    myVar = None
# Now you're free to use myVar without Python complaining.

Sin embargo, todavía no creo que sea una buena idea; en mi opinión, debe refactorizar su código para que esta situación no se produzca.


Es solo una adición a las respuestas anteriores para verificar si una clave está presente en JSON / Dict o no en python

'Nombre de objeto Json / Dict'. Has_key ('nombre de clave')

esto devolverá verdadero o falso


Para objetos / módulos, también puedes

'var' in dir(obj)

Por ejemplo,

>>> class Something(object):
...     pass
...
>>> c = Something()
>>> c.a = 1
>>> 'a' in dir(c)
True
>>> 'b' in dir(c)
False

Se llama catch except en Python. Aparte de eso, está bien para casos tan simples. Existe el AttributeError que se puede usar para verificar si un objeto tiene un atributo.


Una forma simple es inicializarlo al principio diciendo myVar = None

Luego, más tarde:

if myVar is not None:
    # Do something

Usar try / except es la mejor manera de probar la existencia de una variable. Pero es casi seguro que hay una mejor manera de hacer lo que sea que esté haciendo que configurando / probando variables globales.

Por ejemplo, si desea inicializar una variable de nivel de módulo la primera vez que llama a alguna función, es mejor que utilice un código como el siguiente:

my_variable = None

def InitMyVariable():
  global my_variable
  if my_variable is None:
    my_variable = ...

Asumiré que la prueba se utilizará en una función, similar a la respuesta del usuario 97370 . No me gusta esa respuesta porque contamina el espacio de nombres global. Una forma de solucionarlo es usar una clase en su lugar:

class InitMyVariable(object):
  my_variable = None

def __call__(self):
  if self.my_variable is None:
   self.my_variable = ...

No me gusta esto, porque complica el código y abre preguntas como, ¿debería esto confirmar con el patrón de programación de Singleton? Afortunadamente, Python ha permitido que las funciones tengan atributos por un tiempo, lo que nos da esta solución simple:

def InitMyVariable():
  if InitMyVariable.my_variable is None:
    InitMyVariable.my_variable = ...
InitMyVariable.my_variable = None




variables