Если возникает исключение, я бы хотел проанализировать трассировку стека в 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
можно использовать для получения дополнительной информации о существующем исключении.Но я не хочу печатать исключение, я хочу сохранить его.Поэтому я хотел бы получить трассировку стека в виде набора экземпляров некоторого класса, где каждый экземпляр представляет данные в каждом кадре стека.Как я могу сделать , что ?