No Python, como faço para inspecionar e reaumentar uma exceção enquanto mantenho a pilha de chamadas original?

Eu tenho uma situação onde eu estou pegando um tipo de exceção específico, inspecionando a mensagem da exceção para verificar se é realmente uma exceção que eu quero pegar, e então re-elevando a exceção se não:

try:
    # do something exception-prone
except FooException as e:
    if e.message == 'Something I want to handle':
        # handle the exception
    else:
        raise e

Isso funciona bem, com um problema. No caso de eu re-levantar a exceção, essa exceção agora ocorre na linha que eu re-levantou-a (ou seja, emraise e), e não no local onde a exceção ocorreu originalmente. Isso não é ideal para depuração, onde você quer saber onde a exceção original aconteceu.

Assim, a minha pergunta: existe alguma maneira de re-raise ou "passar" uma exceção depois de pegá-lo, mantendo o local original da exceção?

NOTA: Caso você esteja se perguntando qual é a situação real: estou importando dinamicamente alguns módulos usando__import__. Estou pegandoImportError para lidar graciosamente com o caso de que qualquer um desses módulos não existe. No entanto, no caso de qualquer um desses módulos conter uma declaração de importação que aumenteImportError, Eu quero que as exceções "reais" (do ponto de vista da minha aplicação) sejam levantadas - e no local original, no que diz respeito às ferramentas de depuração.

questionAnswers(1)

yourAnswerToTheQuestion