Python: ¿Cómo ignorar una excepción y proceder? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Tengo una oportunidad...excepto bloquear en mi código y Cuando una excepción es lanzar. Realmente solo quiero continuar con el código porque en ese caso, todo todavía es capaz de funcionar bien. El problema es si dejas el bloque except: vacío o con un # do nada, te da un error de sintaxis. No puedo usar continuar porque no está en un bucle. ¿Hay alguna palabra clave que pueda usar que le diga al código que siga adelante?

Author: Rob, 2009-02-22

4 answers

except:
    pass
 414
Author: Andy Hume,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-22 11:03:55

El estándar " nop " en Python es la instrucción pass:

try:
    do_something()
except Exception:
    pass

Debido a que la última excepción lanzada se recuerda en Python, algunos de los objetos involucrados en la instrucción exception-throwing se mantienen en vivo indefinidamente (en realidad, hasta la siguiente excepción). En caso de que esto sea importante para usted y (típicamente) no necesite recordar la última excepción lanzada, es posible que desee hacer lo siguiente en lugar de pass:

try:
    do_something()
except Exception:
    sys.exc_clear()

Esto borra la última excepción lanzada.

 217
Author: tzot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-02 01:01:37

Hay una nueva forma de hacer esto en Python 3.4:

from contextlib import suppress

with suppress(Exception):
  # your code

Aquí está el commit que lo agregó: http://hg.python.org/cpython/rev/406b47c64480

Y aquí está el autor, Raymond Hettinger, hablando de esto y todo tipo de otro hotness Python (bit relevante en 43:30): http://www.youtube.com/watch?v=OSGv2VnC0go

Si quieres emular la palabra clave desnuda except y también ignorar cosas como KeyboardInterrupt, aunque normalmente no lo haces, puedes usar with suppress(BaseException).

Editar: Parece que ignored fue renombrado a suppress antes de la versión 3.4.

 124
Author: Jack O'Connor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-19 15:10:53

Prueba esto:

try:
    blah()
except:
    pass
 13
Author: ryeguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-22 11:04:33