Python 3.11+Исключенияисключение
ExceptionGroup
встроенные исключения
Группа нескольких исключений сразу (Python 3.11+); обрабатывается except*.
Синтаксис
raise ExceptionGroup
Членство в группе не работает «прозрачно»: except ValueError не поймает группу, внутри которой лежит ValueError, а except ExceptionGroup не сработает на одиночный ValueError, брошенный обычным raise. Ради этого и придумали except* — он разбирает группу по типам, выполняет ветку для подходящего подмножества, а остальные исключения пробрасывает дальше; при обычном except вы получаете объект целиком и разбираете список e.exceptions руками. Конструктор требует непустой список, а все элементы — наследники Exception; для BaseException-потомков есть BaseExceptionGroup. Чаще всего группу вы встретите не в своём raise, а на выходе из asyncio.TaskGroup.
Примеры
try:
raise ExceptionGroup('несколько ошибок', [ValueError('a'), KeyError('b')])
except ExceptionGroup as e:
print(type(e).__name__) # → ExceptionGroup
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности