Как получить трассировку стека вложенного исключения в Python? - PullRequest
0 голосов
/ 27 сентября 2019

Если возникает исключение, я бы хотел проанализировать трассировку стека в python, которая говорит о том, где именно проблема в файле исходного кода.

Конечно, для этой цели существует модуль traceback,И это прекрасно работает для регулярных исключений.Но как вы справляетесь с этой ситуацией, если возникают вложенные исключения?

Рассмотрите этот пример:

def test():
    try:
        a = 0
        b = 5 / a
    except Exception as ee1:
        assert False

test()

В этом примере выводятся два исключения:

Traceback (most recent call last):
  File "./test4d.py", line 12, in test
    b = 5 / a
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./test4d.py", line 18, in <module>
    test()
  File "./test4d.py", line 14, in test
    assert False
AssertionError

Итак, информация ооба исключения известны интерпретатору.Поэтому я хотел бы получить эти два фрагмента информации из Python: трассировку стека оператора assert (используется в качестве примера здесь, чтобы вызвать исключение) и трассировку стека исключения деления на ноль (используется здесь в качестве примера, чтобы вызватьисключение). Как я могу это сделать?

И вторая часть вопроса: как я могу сделать это структурированным образом?Модуль traceback можно использовать для получения дополнительной информации о существующем исключении.Но я не хочу печатать исключение, я хочу сохранить его.Поэтому я хотел бы получить трассировку стека в виде набора экземпляров некоторого класса, где каждый экземпляр представляет данные в каждом кадре стека.Как я могу сделать , что ?

...