Печать полной трассировки стека из вызова root при попытке / перехвате исключения в Python? - PullRequest
0 голосов
/ 18 апреля 2020

Как можно записать всю трассировку стека при регистрации перехваченного исключения, так же, как если бы исключение не было перехвачено?

В настоящее время оно включает только стек до тех пор, пока не будет предпринята попытка Блок / catch, но не выше.

def a():
    raise RuntimeError('Error!')

a()

Будет печатать

Traceback (most recent call last):
  File "MY_FILE", line 16, in <module>
    a()
  File "MY_FILE.py", line 7, in a
    raise RuntimeError('Error!')
RuntimeError: Error!

При обнаружении той же ошибки с try / catch

def a():
    try:
        raise RuntimeError('Error!')
    except Exception as ex:
        traceback.print_exc() # or traceback.print_tb(ex.__traceback__) or logger.exception('', exc_info=True)
a()

Будет печатать только

Traceback (most recent call last):
  File "MY_FILE.py", line 9, in a
    raise RuntimeError('Error!')
RuntimeError: Error!

Любая трассировка стека за пределами области действия try / catch не указана. В приведенном выше примере это тривиально, но что, если a () вызывается из большого количества мест в приложении? Контекст ошибки может частично быть причиной возникновения ошибки, когда полная трассировка стека значительно упростит отладку. Любая идея, как получить исключение полной трассировки, кроме traceback.print_stack()?

...