En Python, ¿cómo inspecciono y luego vuelvo a generar una excepción mientras mantengo la pila de llamadas original?

Tengo una situación en la que estoy detectando un tipo de excepción específico, inspeccionando el mensaje de la excepción para verificar si realmente es una excepción que quiero detectar, y luego reenvío la excepción si no:

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 elevar la excepción, esa excepción ahora ocurre en la línea en la que la he vuelto a elevar (es decir, enraise e), en lugar de en la ubicación donde se produjo la excepción originalmente. 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 aumentar o "pasar" una excepción después de atraparla mientras se mantiene la ubicación de la excepción original?

NOTA: En caso de que se esté preguntando cuál es la situación real: estoy importando dinámicamente algunos módulos usando__import__. Estoy atrapandoImportError para tratar con gracia el caso de que ninguno de estos módulos no exista. Sin embargo, en el caso de que alguno de estos módulos contenga una declaración de importación que genereImportErrorQuiero que se realicen esas excepciones "reales" (desde el punto de vista de mi aplicación), y en la ubicación original en lo que respecta a las herramientas de depuración.

Respuestas a la pregunta(1)

Su respuesta a la pregunta