¿Cómo puedo obtener el nombre de una excepción que se generó en Python?
p.ej,
try:
foo = bar
except Exception as exception:
name_of_exception = ???
assert name_of_exception == 'NameError'
print "Failed with exception [%s]" % name_of_exception
Por ejemplo, estoy detectando varias (o todas) excepciones y quiero imprimir el nombre de la excepción en un mensaje de error.
python
exception
exception-handling
Rob Bednark
fuente
fuente
except NameError:
) para empezar?traceback
módulo de la biblioteca estándar , que tiene funciones que realizan un buen formateo de excepciones y rastreos.except
declaración, pero la entrada de registro es muy similar en cada caso.Respuestas:
Aquí hay algunas formas diferentes de obtener el nombre de la clase de la excepción:
type(exception).__name__
exception.__class__.__name__
exception.__class__.__qualname__
p.ej,
fuente
Esto funciona, pero parece que debe haber una forma más fácil y directa.
fuente
except Exception as exception
con el tipo de excepción que le gustaría detectar, es decirexcept NameError as exception
.También puede utilizar
sys.exc_info()
.exc_info()
devuelve 3 valores: tipo, valor, rastreo. Sobre la documentación: https://docs.python.org/3/library/sys.html#sys.exc_infofuente
Si desea el nombre de clase completamente calificado (por ejemplo, en
sqlalchemy.exc.IntegrityError
lugar de soloIntegrityError
), puede usar la función a continuación, que tomé de la increíble respuesta de MB a otra pregunta (acabo de cambiar el nombre de algunas variables para satisfacer mis gustos):Ejemplo:
fuente
Las otras respuestas aquí son excelentes para fines de exploración, pero si el objetivo principal es registrar la excepción (incluido el nombre de la excepción), ¿quizás considere usar logging.exception en lugar de imprimir?
fuente