Sobes.tech
Junior
197

Povedzte o hierarchii výnimiek v Pythone.

Odpoveď od AI

sobes.tech AI

V Pythone sú výnimky organizované do hierarchického stromu, ktorého vrcholom je trieda BaseException.

Hlavné vetvy a triedy:

  • BaseException: Základná trieda pre všetky výnimky. Nie je určená na priame zachytávanie vo väčšine prípadov.
    • SystemExit: Vzniká pri ukončení programu, napríklad volaním sys.exit().
    • KeyboardInterrupt: Generuje sa pri prerušení behu programu používateľom (zvyčajne Ctrl+C).
    • GeneratorExit: Vzniká pri zatváraní generátora.
    • Exception: Základná trieda pre väčšinu spracovávaných výnimiek. Zvyčajne sa zachytáva v blokoch except.
      • StopIteration: Generované iterátorom na signalizáciu konca prvkov.
      • ArithmeticError: Základná trieda pre chyby v aritmetických operáciách.
        • FloatingPointError: Chyba pri operáciách s plávajúcou desatinnou čiarkou (zriedka).
        • OverflowError: Výsledok aritmetickej operácie je príliš veľký.
        • ZeroDivisionError: Delenie nulou.
      • AssertionError: Chyba pri neúspešnom assert.
      • AttributeError: Pokus o prístup k neexistujúcemu atribútu objektu.
      • EOFError: Chyba pri dosiahnutí konca súboru bez čítania dát.
      • ImportError: Chyba pri nemožnosti importovať modul/meno.
        • ModuleNotFoundError: Modul nebol nájdený.
      • LookupError: Základná trieda pre chyby pri hľadaní podľa kľúča/ indexu.
        • IndexError: Neplatný index v sekvencii.
        • KeyError: Neplatný kľúč v slovníku.
      • NameError: Pokus o použitie nedefinovanej premennej/mena.
        • UnboundLocalError: Pokus o prístup k lokálnej premennej pred jej priradením.
      • OSError: Chyby súvisiace s operačným systémom (súbory, procesy atď.). Obsahuje mnoho podtried.
        • FileNotFoundError: Súbor alebo adresár nebol nájdený.
        • IsADirectoryError: Očakával sa súbor, ale bol nájdený adresár.
        • NotADirectoryError: Očakával sa adresár, ale bol nájdený súbor.
        • PermissionError: Chyba prístupu (napríklad, chýbajú práva na čítanie/zápis).
        • ProcessLookupError: Proces s daným PID neexistuje.
        • TimeoutError: Operácia prekročila stanovený čas čakania.
      • RuntimeError: Chyba, ktorá nespadá do iných kategórií RuntimeWarning.
        • RecursionError: Prekročená maximálna hĺbka rekurzie.
      • SyntaxError: Chyba syntaxu kódu.
        • IndentationError: Nesprávne odsadenie.
      • SystemError: Interná chyba interpretátora Python.
      • TypeError: Operácia aplikovaná na objekt nevhodného typu.
      • ValueError: Operácia dostáva argument správneho typu, ale s nekorektnou hodnotou.
      • RuntimeWarning: Upozornenie počas behu (nie je výnimkou, ale často súvisí).
      • ... (mnoho ďalších, špecifických pre moduly alebo situácie)

Pri zachytávaní výnimiek sú bloky except spracovávané odhora nadol. Je dôležité zachytiť špecifickejšie výnimky pred ich základnými triedami, aby ste predišli ich neúmyselnému zachyteniu.

Príklad:

# Zachytenie špecifickejšej výnimky pred základnou
try:
    # Kód, ktorý môže spôsobiť výnimku
    d = {"a": 1}
    print(d["b"])
except KeyError:
    # Spracovanie chýbajúceho kľúča
    print("Chyba: Kľúč nebol nájdený.")
except LookupError:
    # Spracovanie všeobecných chýb hľadania (vrátane KeyError a IndexError)
    print("Chyba: Problém pri hľadaní prvku.")
except Exception as e:
    # Spracovanie všetkých ostatných výnimiek
    print(f"Iná chyba: {e}")

Ak by except LookupError bol umiestnený pred except KeyError, KeyError by bol zachytený základnou triedou.