В 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
Я хочу, чтобы эти "настоящие" (с точки зрения моего приложения) исключения, которые будут выдвинуты - и в исходном месте, что касается средств отладки.