Как можно записать всю трассировку стека при регистрации перехваченного исключения, так же, как если бы исключение не было перехвачено?
В настоящее время оно включает только стек до тех пор, пока не будет предпринята попытка Блок / 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()
?