validar try tipos sintaxis recent print por most last invalid excepciones error ejemplos diferentes python multithreading exception-handling python-3.x catch-all

try - Atrapando todas las excepciones en Python



validar division por 0 en python (3)

Para evitar el enmascaramiento de las excepciones básicas, debe "volver a elevar" cualquier excepción que no sea la que desea controlar explícitamente, por ejemplo (adaptado de 8. Errores y excepciones ):

import sys

try: # do something that could throw an exception: except IOError as (errno, strerror): print "I/O error({0}): {1}".format(errno, strerror) except ValueError: print "Could not convert data to an integer." except: # maybe log the exception (e.g. in debug mode) # re-raise the exception: raise

En Python, ¿cuál es la mejor manera de detectar "todas" las excepciones?

except: # do stuff with sys.exc_info()[1] except BaseException as exc: except Exception as exc:

La captura puede estar ejecutando en un hilo.

Mi objetivo es registrar cualquier excepción que pueda ser lanzada por un código normal sin enmascarar ninguna excepción especial de Python, como aquellas que indican la terminación del proceso, etc.

También es conveniente obtener un identificador de la excepción (como las cláusulas anteriores que contienen exc ).


Si necesitas capturar todas las excepciones y hacer lo mismo para todos, te sugeriré esto:

try: #stuff except: # do some stuff

Si no desea enmascarar las excepciones "especiales" de Python, use la clase base Exception

try: #stuff except Exception: # do some stuff

para algunas excepciones relacionadas con la gestión, capturarlos explícitamente:

try: #stuff except FirstExceptionBaseClassYouWantToCatch as exc: # do some stuff except SecondExceptionBaseClassYouWantToCatch as exc: # do some other stuff based except (ThirdExceptionBaseClassYouWantToCatch, FourthExceptionBaseClassYouWantToCatch) as exc: # do some other stuff based

La jerarquía de excepciones de los documentos de Python debería ser una lectura útil.


  • except Exception: vs except BaseException: :

    La diferencia entre la captura de Exception y BaseException es que, de acuerdo con la excepción de la jerarquía de excepciones, como SystemExit, KeyboardInterrupt y GeneratorExit, no se detectarán cuando se usen, except Exception porque se heredan directamente de BaseException .

  • except: vs except BaseException: :

    La diferencia entre estos dos está principalmente en python 2 (AFAIK), y solo cuando se usa una clase de estilo antiguo como una excepción para ser levantada, en este caso solo la cláusula sin expresiones excepto podrá capturar la excepción, por ejemplo.

    class NewStyleException(Exception): pass try: raise NewStyleException except BaseException: print "Caught" class OldStyleException: pass try: raise OldStyleException except BaseException: print "BaseException caught when raising OldStyleException" except: print "Caught"