Python Glossary English

Python 3.11+Исключенияконструкция

except* и группы исключений

обработка

except* ловит исключения внутри ExceptionGroup по типу: каждый обработчик получает свою подгруппу, необработанное летит дальше (Python 3.11+).

Синтаксис

try:
    ...
except* ТипОшибки as eg:
    ...

Главная ловушка: в одном try нельзя смешивать except и except* — это SyntaxError, как и голый except* без типа. В отличие от except, сработать может несколько обработчиков подряд, а в переменную всегда попадает группа, а не само исключение: одиночная ошибка тоже заворачивается в ExceptionGroup, поэтому смотрят eg.exceptions. Внутри except* запрещены break, continue и return.

Примеры

# Python 3.11+
try:
    raise ExceptionGroup('eg', [ValueError(1), TypeError(2), ValueError(3)])
except* ValueError as eg:
    print(eg.exceptions)  # → (ValueError(1), ValueError(3))
except* TypeError as eg:
    print(eg.exceptions)  # → (TypeError(2),)
# Python 3.11+
try:
    raise KeyError('k')
except* KeyError as eg:
    print(repr(eg))  # → ExceptionGroup('', (KeyError('k'),))
# Python 3.11+
src = 'try:\n    pass\nexcept ValueError:\n    pass\n' 'except* TypeError:\n    pass\n'
compile(src, 'demo', 'exec')  # → SyntaxError

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности