Junior
Quali sono le caratteristiche della gestione delle eccezioni in Python?
sobes.tech AI
Risposta dell'AI
Le eccezioni in Python sono eventi che interrompono il flusso normale di esecuzione del programma. Sono oggetti che rappresentano errori.
Caratteristiche:
- Gerarchia delle eccezioni: Tutte le eccezioni integrate sono classi e sono organizzate in una gerarchia basata sull'ereditarietà dalla classe base
BaseException.# Esempio di gerarchia # BaseException -> Exception -> StandardError -> ... # Exception -> ArithmeticError -> ZeroDivisionError - Blocchi
try...except...: Meccanismo principale per gestire le eccezioni.try: # Codice che può generare un'eccezione result = 10 / 0 except ZeroDivisionError: # Gestione di un'eccezione specifica print("Divisione per zero!") except Exception as e: # Gestione di altre eccezioni print(f"Si è verificato un errore: {e}") - Più blocchi
except: Permettono di gestire diversi tipi di eccezioni in modo diverso.try: # Codice value = int("abc") except ValueError: print("Formato numerico non valido.") except TypeError: print("Tipo di dato non valido.") - Blocco
else: Si esegue se il bloccotrytermina senza eccezioni.try: # Codice result = 10 / 2 except ZeroDivisionError: print("Divisione per zero!") else: print("Operazione completata con successo.") - Blocco
finally: Si esegue sempre, indipendentemente dal fatto che si sia verificata un'eccezione o meno. Viene usato per liberare risorse.file = None try: file = open("myfile.txt", "r") # Lettura del file except FileNotFoundError: print("File non trovato.") finally: if file: file.close() # Chiusura garantita del file - Operatore
raise: Viene usato per sollevare esplicitamente un'eccezione.def divide(a, b): if b == 0: raise ZeroDivisionError("Impossibile dividere per zero") return a / b try: divide(10, 0) except ZeroDivisionError as e: print(f"Errore: {e}") - Eccezioni personalizzate: È possibile creare proprie classi di eccezioni ereditando da
Exceptiono da un'altra classe di eccezioni esistente.class CustomError(Exception): pass def process_data(data): if not data: raise CustomError("Dati vuoti") try: process_data([]) except CustomError as e: print(f"Errore: {e}") - Gestione delle eccezioni usando il gestore di contesto
with: Rende più semplice lavorare con risorse che richiedono una chiusura esplicita (come i file).try: with open("myfile.txt", "r") as file: # Lavoro con il file content = file.read() except FileNotFoundError: print("File non trovato.") # Il file viene chiuso automaticamente all'uscita dal blocco 'with' - Concatenamento di eccezioni: Durante la gestione di un'eccezione, è possibile conservare informazioni sull'eccezione precedente (implicitamente o usando
raise Exception from another_exception).
Queste caratteristiche forniscono un meccanismo flessibile e potente per gestire gli errori in Python, consentendo di creare programmi più affidabili e resilienti ai guasti.