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

Resuelto The.Anti.9 asked hace 15 años • 4 respuestas

Lo intento... excepto bloquear en mi código y cuando se lanza una excepción. Realmente solo quiero continuar con el código porque en ese caso, todo aún puede funcionar bien. El problema es que si dejas el bloque excepto: vacío o con un #no hacer nada, te da un error de sintaxis. No puedo usar continuar porque no está en un bucle. ¿Existe alguna palabra clave que pueda usar que le indique al código que continúe?

The.Anti.9 avatar Feb 22 '09 18:02 The.Anti.9
Aceptado
except Exception:
    pass

Documentos de Python para la declaración de paso

Andy Hume avatar Feb 22 '2009 11:02 Andy Hume

respuesta genérica

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

try:
    do_something()
except Exception:
    pass

Usar except Exceptionen lugar de simplemente exceptevitar detectar excepciones como SystemExit, KeyboardInterruptetc.

Pitón 2

Debido a que Python 2 recuerda la última excepción lanzada, algunos de los objetos involucrados en la declaración de lanzamiento de excepción se mantienen activos indefinidamente (en realidad, hasta la próxima excepción). En caso de que esto sea importante para usted y (normalmente) 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.

Pitón 3

En Python 3, la variable que contiene la instancia de excepción se elimina al salir del exceptbloque. Incluso si la variable tenía un valor anteriormente, después de entrar y salir del exceptbloque vuelve a quedar indefinida .

tzot avatar Feb 22 '2009 20:02 tzot

Hay una nueva forma de hacer esto 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, hablando sobre esto y todo tipo de otros atractivos de Python (parte relevante en el minuto 43:30): http://www.youtube.com/watch?v=OSGv2VnC0go

Si desea emular la exceptpalabra clave básica y también ignorar cosas como KeyboardInterrupt(aunque normalmente no lo hace), puede usar with suppress(BaseException).

Editar: Parece que ignoredse le cambió el nombre a suppressantes de la versión 3.4.

Jack O'Connor avatar Mar 22 '2013 08:03 Jack O'Connor