Sobes.tech
Junior

Hogyan kezeljük helyesen a kivételeket Pythonban különböző módokon?

sobes.tech MI

Válasz az MI-től

Exceptions kezelése try, except, else, finally blokkok segítségével történik.

Fő típusai a kezelésnek:

  1. Alapvető elfogás: Bármilyen kivételt elfog.

    try:
        # Kód, ami kivételt okozhat
        result = 10 / 0
    except:
        # Bármilyen kivétel kezelése
        print("Hiba történt.")
    
  2. Egy adott kivétel elfogása: Konkrét típusú kivételt fog el.

    try:
        # Kód, ami kivételt okozhat
        result = 10 / 0
    except ZeroDivisionError:
        # Nullával való osztás kezelése
        print("Hiba: nullával való osztás.")
    
  3. Több kivétel elfogása: Több típusú kivételt fog el.

    try:
        # Kód, ami kivételt okozhat
        data = [1, 2, 3]
        print(data[5])
        result = 10 / 0
    except (IndexError, ZeroDivisionError):
        # Index vagy nullával való osztás hiba kezelése
        print("Index vagy nullával való osztás hiba.")
    
  4. Kivétel objektumhoz való hozzáféréssel: Lehetővé teszi a hiba részleteinek elérését.

    try:
        # Kód, ami kivételt okozhat
        result = int("abc")
    except ValueError as e:
        # Hiba kezelése, az e tartalmazza a hiba információt
        print(f"Hibaérték: {e}")
    
  5. else használata: Akkor fut le, ha nem történt kivétel.

    try:
        # Kód, hiba nélkül
        result = 10 / 2
    except ZeroDivisionError:
        print("Hiba: nullával való osztás.")
    else:
        # Ha nincs hiba, ez fut le
        print(f"Eredmény: {result}")
    
  6. finally használata: Mindig lefut, függetlenül attól, hogy volt-e kivétel vagy sem. Gyakran erőforrások felszabadítására használják.

    file = None
    try:
        file = open("myfile.txt", "r")
        # Fájl olvasása vagy más műveletek
    except FileNotFoundError:
        print("Fájl nem található.")
    finally:
        # Biztos, hogy bezárjuk a fájlt, ha nyitva volt
        if file:
            file.close()
            print("Fájl bezárva.")
    
  7. raise kivétel dobására: Kivétel generálására használják.

    def divide(a, b):
        if b == 0:
            # Kivétel dobása
            raise ZeroDivisionError("Nem osztható nullával!")
        return a / b
    
    try:
        print(divide(10, 0))
    except ZeroDivisionError as e:
        print(f"Elfogott kivétel: {e}")
    
  8. raise ... from ... kivételek összekapcsolására: Lehetővé teszi egy új kivétel összekapcsolását a korábbival.

    try:
        result = 1 / 0
    except ZeroDivisionError as e:
        # Új kivétel dobása, ami a korábbihoz kapcsolódik
        raise RuntimeError("Belső hiba történt") from e
    
  9. A with open(...) kontextuskezelő használata: Biztosítja a forrás helyes lezárását (pl. fájl).

    try:
        with open("myfile.txt", "r") as file:
            content = file.read()
            print(content)
        # A fájl automatikusan bezáródik a with blokk elhagyásakor
    except FileNotFoundError:
        print("Fájl nem található.")
    

Az exception kezelés blokkjainak összefoglalása:

Blokk Leírás Mikor fut le
try Kódblokk, ahol kivételek fordulhatnak elő Mindig
except A try-ban keletkezett kivételek kezelése Ha kivétel történik
else Ha nem történt kivétel, akkor fut le Ha nincs kivétel
finally Mindig fut, függetlenül attól, hogy volt-e kivétel vagy sem Mindig

A módszer kiválasztása a helyzettől és a kívánt részletességtől függ. Fontos, hogy csak azokat a kivételeket fogd be, amelyeket megfelelően tudsz kezelni, és kerüld a túl általános fogásokat (except:) szükségtelen esetben.