Sobes.tech
Senior

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

sobes.tech AI

Отговор от AI

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

BaseExceptionGroup:

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

ExceptionGroup:

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

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

  • exceptions: Tuple от изключения в групата.
  • message: Съобщение, описващо групата изключения.
  • subgroup(filter): Създава нова група изключения, съдържаща само тези изключения от оригиналната група, които съответстват на филтъра.
  • split(filter): Разделя групата на две: една с изключения, съответстващи на филтъра, и друга с останалите. Връща tuple (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}")