Sobes.tech
Senior

Mi a célja a BaseExceptionGroup és ExceptionGroup osztályoknak Pythonban?

sobes.tech MI

Válasz az MI-től

A BaseExceptionGroup és az ExceptionGroup olyan csoportokat hoznak létre, amelyek több kivételt gyűjtenek össze, és ezeket egyetlen objektumként emelik ki.

BaseExceptionGroup:

  • Minden kivételcsoport alap osztálya.
  • Absztrakt, nem használható közvetlenül.
  • Általános logikát tartalmaz a kivételcsoportok kezeléséhez.

ExceptionGroup:

  • Konkrét osztály, amely az Exception leszármazott kivételeket csoportosítja.
  • A leggyakrabban használt osztály több hiba kezelésére aszinkron kódban vagy párhuzamos végrehajtás során.
  • Lehetővé teszi az egyes kivételek kezelését a csoporton belül az except* segítségével.

Fő jellemzők:

  • exceptions: A csoportban lévő kivételek tuple-je.
  • message: Üzenet, amely leírja a kivételcsoportot.
  • subgroup(filter): Új kivételcsoportot hoz létre, amely csak az eredeti csoportban lévő, a szűrőnek megfelelő kivételeket tartalmazza.
  • split(filter): A csoportot két részre osztja: egyet a szűrőnek megfelelő kivételekkel, egyet a többi kivétellel. Visszaad egy tuple-t (matching_group, rest_group).

Példa az except* használatára:

# Hibát okozó funkciók szimulációja
def func1():
    raise ValueError("Hiba func1-ben")

def func2():
    raise TypeError("Hiba func2-ben")

# Kivételcsoportosítás és kezelés
try:
    # Több feladat végrehajtásának szimulációja
    errors = []
    try:
        func1()
    except Exception as e:
        errors.append(e)
    try:
        func2()
    except Exception as e:
        errors.append(e)

    if errors:
        raise ExceptionGroup("Több hiba a folyamat során", errors)

except* ValueError as ve:
    # Csak a ValueError kezelés
    print(f"Elkapott ValueError: {ve}")
except* TypeError as te:
    # Csak a TypeError kezelés
    print(f"Elkapott TypeError: {te}")
except ExceptionGroup as eg:
    # A többi vagy az egész csoport kezelése, ha nincs egyezés
    print(f"A fennmaradó kivételcsoport: {eg}")