errors - python rescue exception
Python: ¿Cómo ignorar una excepción y proceder? (4)
Respuesta genérica
El estándar "nop" en Python es la declaración de pass
:
try:
do_something()
except Exception:
pass
Usando except Exception
lugar de un SystemExit
except
evitar la captura de excepciones como SystemExit
, KeyboardInterrupt
etc.
Python 2
Debido a que la última excepción lanzada se recuerda en Python 2, algunos de los objetos involucrados en la declaración de lanzamiento de excepciones se mantienen en vivo indefinidamente (en realidad, hasta la próxima excepción). En caso de que esto sea importante para usted y (normalmente) no necesita recordar la última excepción lanzada, puede hacer lo siguiente en lugar de pass
:
try:
do_something()
except Exception:
sys.exc_clear()
Esto borra la última excepción lanzada.
Python 3
En Python 3, la variable que contiene la instancia de excepción se elimina al salir del bloque de except
. Incluso si la variable mantuvo un valor anteriormente, después de ingresar y salir del bloque de except
, se vuelve a definir de nuevo.
Esta pregunta ya tiene una respuesta aquí:
- Cómo ignorar adecuadamente las excepciones 11 respuestas
Tengo un intento ... excepto el bloqueo en mi código y cuando se lanza una excepción. Realmente solo quiero continuar con el código porque en ese caso, todo puede funcionar bien. El problema es que si deja el bloque excepto: vacío o con un #do nada, le da un error de sintaxis. No puedo usar continuar porque no está en un bucle. ¿Hay alguna palabra clave que pueda usar que diga el código para seguir adelante?
Hay una nueva forma de hacerlo en Python 3.4:
from contextlib import suppress
with suppress(Exception):
# your code
Aquí está el compromiso que lo agregó: http://hg.python.org/cpython/rev/406b47c64480
Y aquí está el autor, Raymond Hettinger, que habla sobre esto y todo otro tipo de picor de Python (bit relevante a las 43:30): http://www.youtube.com/watch?v=OSGv2VnC0go
Si quisiera emular la palabra clave simple except
y también ignorar cosas como KeyboardInterrupt
aunque normalmente no lo hace, podría usar with suppress(BaseException)
.
Edición: Parece que ignored
fue renombrado para suppress
antes de la versión 3.4.
Prueba esto:
try:
blah()
except:
pass
except:
pass