В Python, как проверить, а затем повторно вызвать исключение, сохраняя при этом исходный стек вызовов?

У меня возникла ситуация, когда я перехватываю определенный тип исключения, проверяю сообщение об исключении, чтобы проверить, действительно ли это исключение, которое я хочу перехватить, и затем повторно вызываю исключение, если нет:

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

Это отлично работает, с одной проблемой. В случае, когда я повторно вызываю исключение, это исключение теперь возникает в строке, в которой я повторно поднял его (т.е. вraise e), а не в том месте, где первоначально произошло исключение. Это не идеально для отладки, когда вы хотите знать, где произошло первоначальное исключение.

Таким образом, мой вопрос: есть ли способ повторно поднять или иным образом «передать»? исключение после его перехвата при сохранении исходного местоположения исключения?

ПРИМЕЧАНИЕ. В случае, если вам интересно, какова реальная ситуация: я динамически импортирую некоторые модули, используя__import__, Я ловлюImportError изящно разобраться со случаем, что ни один из этих модулей не существует. Однако, в случае, если любой из этих модулей сам содержит оператор импорта, который вызываетImportErrorЯ хочу, чтобы эти "настоящие" (с точки зрения моего приложения) исключения, которые будут выдвинуты - и в исходном месте, что касается средств отладки.

Ответы на вопрос(1)

Ваш ответ на вопрос