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}")