Tengo una situación en la que estoy captura de un tipo de excepción específica, inspeccionando el mensaje de excepción para comprobar si en realidad es una excepción quiero coger, y luego volver a lanzar la excepción si no:En Python, ¿cómo inspecciono y luego vuelvo a levantar una excepción mientras mantengo la pila de llamadas original?
try:
# do something exception-prone
except FooException as e:
if e.message == 'Something I want to handle':
# handle the exception
else:
raise e
Esto funciona bien, con un problema. En el caso de que vuelva a plantear la excepción, esa excepción ahora se produce en la línea que realicé de nuevo (es decir, en raise e
), en lugar de en la ubicación donde se produjo originalmente la excepción. Esto no es ideal para la depuración, donde desea saber dónde ocurrió la excepción original.
Por lo tanto, mi pregunta: ¿hay alguna manera de volver a subir o de otra manera "pasar" una excepción después de atraparla mientras se mantiene la ubicación original de la excepción?
NOTA: En caso de que se esté preguntando cuál es la situación real: Importe dinámicamente algunos módulos usando __import__
. Estoy atrapando ImportError
para tratar con gracia el caso de que ninguno de estos módulos exista. Sin embargo, en el caso de que alguno de estos módulos contenga una declaración de importación que aumente ImportError
, quiero que se generen esas excepciones "reales" (desde el punto de vista de mi aplicación) y en la ubicación original en cuanto a la depuración. herramientas están preocupadas.
Duh! Fácil. Estaba buscando la referencia para try/except y olvidé mirar raise. Gracias. – Ghopper21