Назад к вопросам
Senior
90
questionbank

Каковы предназначения классов BaseExceptionGroup и ExceptionGroup в Python?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

BaseExceptionGroup и ExceptionGroup предназначены для группировки нескольких исключений и поднятия их в виде одного объекта.

BaseExceptionGroup:

  • Базовый класс для всех групп исключений.
  • Абстрактный, напрямую не используется.
  • Содержит общую логику для обработки групп исключений.

ExceptionGroup:

  • Конкретный класс для группировки исключений, являющихся потомками Exception.
  • Наиболее часто используемый класс для обработки нескольких ошибок в асинхронном коде или при параллельном выполнении.
  • Позволяет обрабатывать отдельные исключения внутри группы с помощью except*.

Основные характеристики:

  • exceptions: Кортеж исключений в группе.
  • message: Сообщение, описывающее группу исключений.
  • subgroup(filter): Создает новую группу исключений, содержащую только те исключения из исходной группы, которые соответствуют фильтру.
  • split(filter): Разбивает группу на две: одну с исключениями, соответствующими фильтру, и другую с остальными. Возвращает кортеж (matching_group, rest_group).

Пример использования с except*:

# Имитация функций, вызывающих ошибки
def func1():
    raise ValueError("Ошибка в func1")

def func2():
    raise TypeError("Ошибка в func2")

# Группировка и обработка исключений
try:
    # Имитация выполнения нескольких задач
    errors = []
    try:
        func1()
    except Exception as e:
        errors.append(e)
    try:
        func2()
    except Exception as e:
        errors.append(e)

    if errors:
        raise ExceptionGroup("Несколько ошибок в процессе", errors)

except* ValueError as ve:
    # Обработка только ValueError из группы
    print(f"Поймана ошибка ValueError: {ve}")
except* TypeError as te:
    # Обработка только TypeError из группы
    print(f"Поймана ошибка TypeError: {te}")
except ExceptionGroup as eg:
    # Обработка оставшихся (или всей группы, если не было совпадений)
    print(f"Поймана оставшаяся группа исключений: {eg}")