Sobes.tech
Senior

Millised on klasside BaseExceptionGroup ja ExceptionGroup eesmärgid Pythonis?

sobes.tech AI

Vastus AI-lt

BaseExceptionGroup ja ExceptionGroup on mõeldud mitme erandi grupeerimiseks ja nende üleviimiseks ühe objekti vormis.

BaseExceptionGroup:

  • Kõigi erandigruppide põhiklass.
  • Abstraktne, otse ei kasutata.
  • Sisaldab üldist loogikat erandigruppide töötlemiseks.

ExceptionGroup:

  • Konkreetne klass, mis ühendab Exception pärilikke erandeid.
  • Kõige sagedamini kasutatakse mitme vea töötlemiseks asünkroonilises koodis või paralleelkäivituses.
  • Annab võimaluse töödelda gruppi kuuluvad üksikud erandid except* abil.

Peamised omadused:

  • exceptions: erandite kogum.
  • message: sõnum, mis kirjeldab erandite gruppi.
  • subgroup(filter): loob uue erandite grupi, mis sisaldab ainult filtreid vastavaid erandeid.
  • split(filter): jagab grupi kaheks: ühe, mis sisaldab filtreid vastavaid erandeid, ja teise, mis sisaldab ülejäänuid. Tagastab tupsu (matching_group, rest_group).

except* näide:

# Funktsioonid, mis põhjustavad vigu

def func1():
    raise ValueError("Viga func1-s")

def func2():
    raise TypeError("Viga func2-s")

# Vigu grupi ja töötlemise
try:
    # Mitme ülesande täitmine
    errors = []
    try:
        func1()
    except Exception as e:
        errors.append(e)
    try:
        func2()
    except Exception as e:
        errors.append(e)

    if errors:
        raise ExceptionGroup("Mitmed vead protsessis", errors)

except* ValueError as ve:
    # Töötleb ainult ValueError
    print(f"Leiti ValueError: {ve}")
except* TypeError as te:
    # Töötleb ainult TypeError
    print(f"Leiti TypeError: {te}")
except ExceptionGroup as eg:
    # Töötleb ülejäänud või kogu grupi
    print(f"Leiti ülejäänud erandite grupp: {eg}")