W Pythonie, jak mogę sprawdzić, a następnie ponownie zgłosić wyjątek, zachowując oryginalny stos wywołań?

Mam sytuację, w której łapię określony typ wyjątku, sprawdzając komunikat wyjątku, aby sprawdzić, czy faktycznie jest to wyjątek, który chcę przechwycić, a następnie ponownie zgłosić wyjątek, jeśli nie:

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

To działa dobrze, z jednym problemem. W przypadku ponownego zgłoszenia wyjątku ten wyjątek występuje teraz w wierszu, który go ponownie podniosłem (tj. Wraise e), a nie w lokalizacji, w której pierwotnie wystąpił wyjątek. Nie jest to idealne rozwiązanie do debugowania, w którym chcesz wiedzieć, gdzie wystąpił oryginalny wyjątek.

Zatem moje pytanie: czy jest jakiś sposób na ponowne podniesienie lub w inny sposób „przekazanie” wyjątku po złapaniu go przy zachowaniu oryginalnej lokalizacji wyjątku?

UWAGA: W przypadku zastanawiania się, jaka jest rzeczywista sytuacja: dynamicznie importuję niektóre moduły za pomocą__import__. ŁapięImportError z wdzięcznością zająć się przypadkiem, że którykolwiek z tych modułów nie istnieje. Jednak w przypadku, gdy którykolwiek z tych modułów sam zawiera instrukcję importowania, która podnosiImportError, Chcę, aby te „prawdziwe” (z punktu widzenia mojej aplikacji) wyjątki zostały podniesione - iw oryginalnej lokalizacji, jeśli chodzi o narzędzia do debugowania.

questionAnswers(1)

yourAnswerToTheQuestion