Python 3.11+sysфункция
sys.exception()
исключения
Возвращает исключение, которое обрабатывается прямо сейчас (внутри except), или None. Современная замена sys.exc_info() с Python 3.11.
Синтаксис
sys.exception()
Полезна там, где имени из except ... as e не видно: во вспомогательной функции, вызванной из обработчика, или в логгере. После выхода из блока except она снова возвращает None — Python 3 сбрасывает «текущее» исключение, и сохранить его можно только своей переменной. Это то же самое, что sys.exc_info()[1], но одним объектом: тип — type(e), трассировка — e.__traceback__. На Python 3.10 и старше её нет — там AttributeError, и остаётся exc_info().
Примеры
import sys
try:
int('abc')
except ValueError:
e = sys.exception()
print(type(e).__name__, e) # → ValueError invalid literal for int() with base 10: 'abc'
print(sys.exception()) # → None
import sys
def describe():
exc = sys.exception()
return 'нет ошибки' if exc is None else f'обрабатывается {exc!r}'
try:
{}['k']
except KeyError:
print(describe()) # → обрабатывается KeyError('k')
print(describe()) # → нет ошибки
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности