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Сообщить о неточности