ExceptionGroup — это встроенный тип исключения, введённый в Python 3.11, который позволяет группировать и выбрасывать вместе несколько не связанных между собой исключений. Это особенно полезно в асинхронном или конкурентном коде, где несколько задач могут упасть независимо друг от друга в одно время.
Ты можешь выбросить ExceptionGroup, передав сообщение и список исключений:
raise ExceptionGroup("multiple errors", [
ValueError("bad value"),
TypeError("wrong type"),
KeyError("missing key")
])
Python 3.11 представил синтаксис except* специально для обработки ExceptionGroup. В отличие от обычного except, он совпадает со всеми исключениями данного типа внутри группы:
try:
raise ExceptionGroup("errors", [
ValueError("bad value"),
TypeError("wrong type")
])
except* ValueError as eg:
print(f"Handled ValueErrors: {eg.exceptions}")
except* TypeError as eg:
print(f"Handled TypeErrors: {eg.exceptions}")
except* обрабатывает только совпадающие типы исключенийexcept* могут совпадать и выполняться для одной группыasyncio.TaskGroup, где несколько задач могут упасть одновременноexcept* не может смешиваться с обычным except в одном блоке tryExceptionGroup разворачиваются при совпаденииexcept*, сама является ExceptionGroup, содержащей только совпадающие исключенияТы можешь вызвать ExceptionGroup с сообщением и кортежем исключений, аналогично тому, как ты передаёшь аргументы обычному классу исключения.
Новый — ещё не проверен сообществом
Вы