Sobes.tech
Junior

Care sunt caracteristicile gestionării excepțiilor în Python?

sobes.tech AI

Răspuns de la AI

Excepțiile în Python sunt evenimente care întrerup fluxul normal de execuție al programului. Ele sunt obiecte care reprezintă erori.

Caracteristici:

  • Ierarhia excepțiilor: Toate excepțiile încorporate sunt clase și sunt organizate într-o ierarhie bazată pe moștenirea de la clasa de bază BaseException.
    # Exemplu de ierarhie
    # BaseException -> Exception -> StandardError -> ...
    #                  Exception -> ArithmeticError -> ZeroDivisionError
    
  • Blocurile try...except...: Mecanismul principal de tratare a excepțiilor.
    try:
        # Cod care poate genera o excepție
        result = 10 / 0
    except ZeroDivisionError:
        # Tratarea unei excepții specifice
        print("Împărțirea la zero!")
    except Exception as e:
        # Tratarea altor excepții
        print(f"A apărut o eroare: {e}")
    
  • Mai multe blocuri except: Permite tratarea diferitelor tipuri de excepții în mod diferit.
    try:
        # Cod
        value = int("abc")
    except ValueError:
        print("Format de număr invalid.")
    except TypeError:
        print("Tip de date invalid.")
    
  • Blocul else: Se execută dacă blocul try se finalizează fără excepții.
    try:
        # Cod
        result = 10 / 2
    except ZeroDivisionError:
        print("Împărțirea la zero!")
    else:
        print("Operație reușită.")
    
  • Blocul finally: Se execută întotdeauna, indiferent dacă a avut loc o excepție sau nu. Este folosit pentru eliberarea resurselor.
    file = None
    try:
        file = open("myfile.txt", "r")
        # Citirea din fișier
    except FileNotFoundError:
        print("Fișierul nu a fost găsit.")
    finally:
        if file:
            file.close() # Închiderea garantată a fișierului
    
  • Operatorul raise: Este folosit pentru a arunca explicit o excepție.
    def divide(a, b):
        if b == 0:
            raise ZeroDivisionError("Nu se poate împărți la zero")
        return a / b
    
    try:
        divide(10, 0)
    except ZeroDivisionError as e:
        print(f"Eroare: {e}")
    
  • Excepții personalizate: Se pot crea propriile clase de excepții moștenind de la Exception sau altă clasă de excepții existentă.
    class CustomError(Exception):
        pass
    
    def process_data(data):
        if not data:
            raise CustomError("Datele sunt goale")
    
    try:
        process_data([])
    except CustomError as e:
        print(f"Eroare: {e}")
    
  • Tratamentul excepțiilor folosind managerul de context with: Simplifică lucrul cu resursele care necesită închiderea explicită (de exemplu, fișierele).
    try:
        with open("myfile.txt", "r") as file:
            # Lucru cu fișierul
            content = file.read()
    except FileNotFoundError:
        print("Fișierul nu a fost găsit.")
    # Fișierul se închide automat la ieșirea din blocul 'with'
    
  • Împachetarea excepțiilor: În timpul tratamentului unei excepții, se poate păstra informație despre excepția anterioară (implicit sau folosind raise Exception from another_exception).

Aceste caracteristici oferă un mecanism flexibil și puternic pentru gestionarea erorilor în Python, permițând crearea unor programe mai fiabile și rezistente la defecțiuni.