Если вам нужен класс ошибок, сообщение об ошибке и трассировка стека (или любой из них), используйте sys.exec_info()
.
Минимальный рабочий код с некоторым форматированием,
import sys
import traceback
try:
ans = 1/0
except BaseException as ex:
# Get current system exception
ex_type, ex_value, ex_traceback = sys.exc_info()
# Extract unformatter stack traces as tuples
trace_back = traceback.extract_tb(ex_traceback)
# Format stacktrace
stack_trace = list()
for trace in trace_back:
stack_trace.append("File : %s , Line : %d, Func.Name : %s, Message : %s" % (trace[0], trace[1], trace[2], trace[3]))
print("Exception type : %s " % ex_type.__name__)
print("Exception message : %s" %ex_value)
print("Stack trace : %s" %stack_trace)
который выдаст следующий вывод,
Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : <module>, Message : ans = 1/0']
sys.exec_info ()
Это дает вам информацию об исключении о самом последнем исключении. Это вернет кортеж. Ниже приведены значения кортежа (type, value, traceback)
.
traceback является экземпляром объекта traceback. Вы можете отформатировать трассировку с помощью предоставленных методов. Больше информации можно найти в документации по трассировке