← Все вопросы
Как из except Exception as e напечатать сам текст ошибки и её тип?
13
Ловлю исключение, но в логе у меня просто «Ошибка». Как внутри except Exception as e достать читаемое сообщение, тип ошибки и при желании полный traceback?
3 ответа
25
Объект исключения e уже содержит всё нужное:
try:
int("abc")
except Exception as e:
print(e) # invalid literal for int() with base 10: 'abc'
print(type(e).__name__) # ValueError — имя типа
print(repr(e)) # ValueError("invalid literal ...") — тип + текст
str(e)/print(e)— человекочитаемое сообщение.type(e).__name__— короткое имя класса ошибки.repr(e)— и тип, и сообщение сразу, удобно для логов.
Если нужен ПОЛНЫЙ traceback (как при падении), не теряя его в строке лога:
import traceback
try:
...
except Exception as e:
traceback.print_exc() # печатает весь стек
# или в строку: text = traceback.format_exc()
А если используете модуль logging, то logging.exception("упало") внутри except сам подложит traceback.
Александр Комаров logging.exception внутри except — золотой стандарт, не теряешь стек. · 3 месяца назад
9
print(e) — это и есть текст ошибки. Тип — type(e).__name__.
5
Для полного стека — import traceback; traceback.print_exc().
Ваш ответ
Войдите, чтобы ответить на вопрос.