Sobes.tech
Senior

Aké sú účely tried BaseExceptionGroup a ExceptionGroup v Pythone?

sobes.tech AI

Odpoveď od AI

BaseExceptionGroup a ExceptionGroup sú navrhnuté tak, aby skupinovali viacero výnimiek a zdvíhali ich ako jeden objekt.

BaseExceptionGroup:

  • Základná trieda pre všetky skupiny výnimiek.
  • Abstraktná, priamo sa nepoužíva.
  • Obsahuje spoločnú logiku pre spracovanie skupín výnimiek.

ExceptionGroup:

  • Konkrétna trieda na skupinovanie výnimiek, ktoré sú potomkami Exception.
  • Najčastejšie používaná trieda na spracovanie viacerých chýb v asynchrónnom kóde alebo pri paralelnom vykonávaní.
  • Umožňuje spracovať jednotlivé výnimky v skupine pomocou except*.

Hlavné vlastnosti:

  • exceptions: Tuple výnimiek v skupine.
  • message: Správa opisujúca skupinu výnimiek.
  • subgroup(filter): Vytvorí novú skupinu výnimiek obsahujúcu len tie výnimky zo zdrojovej skupiny, ktoré zodpovedajú filtru.
  • split(filter): Rozdelí skupinu na dve: jednu s výnimkami, ktoré zodpovedajú filtru, a druhú so zvyškom. Vráti tuple (matching_group, rest_group).

Príklad použitia s except*:

# Simulácia funkcií, ktoré generujú chyby
def func1():
    raise ValueError("Chyba v func1")

def func2():
    raise TypeError("Chyba v func2")

# Skupinovanie a spracovanie výnimiek
try:
    # Simulácia vykonávania viacerých úloh
    errors = []
    try:
        func1()
    except Exception as e:
        errors.append(e)
    try:
        func2()
    except Exception as e:
        errors.append(e)

    if errors:
        raise ExceptionGroup("Viacero chýb v procese", errors)

except* ValueError as ve:
    # Spracovanie len ValueError
    print(f"Zachytený ValueError: {ve}")
except* TypeError as te:
    # Spracovanie len TypeError
    print(f"Zachytený TypeError: {te}")
except ExceptionGroup as eg:
    # Spracovanie zvyšnej (alebo celej) skupiny
    print(f"Zachytená zostávajúca skupina výnimiek: {eg}")