все Python 3sysфункция
sys.exc_info()
исключения
Возвращает кортеж (тип, исключение, трассировка) для обрабатываемого сейчас исключения или (None, None, None), если обработчик не выполняется.
Синтаксис
exc_type, exc_value, exc_tb = sys.exc_info()
Это старая форма: с Python 3.11 тот же результат даёт sys.exception() одним объектом, а тип и трассировка выводятся из него. Кортеж из трёх None — не ошибка: вызов вне except (или после него) честно возвращает три None, и распаковка t, v, tb = sys.exc_info() пройдёт, а t.__name__ упадёт уже с AttributeError. Трассировку не храните в долгоживущих объектах — она держит кадры со всеми локальными переменными и мешает освобождению памяти.
Примеры
# Python 3.11+
import sys
try:
1 / 0
except ZeroDivisionError:
t, v, tb = sys.exc_info()
print(t.__name__, v, tb.tb_lineno) # → ZeroDivisionError division by zero 4
print(v is sys.exception()) # → True
print(sys.exc_info()) # → (None, None, None)
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности