Come gestire le eccezioni in Python (Prova-eccetto-finalmente)
Scopri come gestire le eccezioni in Python usando try, tranne, altro e infine blocchi. Scrivi codice Python privo di errori e resistente agli arresti anomali.
Panoramica
Un software robusto deve essere preparato a gestire condizioni impreviste, come file mancanti, input utente non validi, errori del database o interruzioni della rete. Quando si verifica un errore in Python, solleva un'eccezione. Se non gestite, le eccezioni interrompono immediatamente il programma e stampano uno stack di traceback.
Lo strumento principale di Python per la gestione degli errori di runtime è il blocco "try-Exception". Inserisci il codice che potrebbe generare un errore all'interno del blocco "try" e definisci il codice di gestione degli errori all'interno di uno o più blocchi "eccetto". Specificare l'esatta classe dell'eccezione (come `ValueError` o `ZeroDivisionError`) è altamente raccomandato, poiché catturare tutte le eccezioni generiche (`eccetto:`) può mascherare i bug.
Per rendere il flusso delle eccezioni più espressivo, Python fornisce due blocchi aggiuntivi: `else` e `finally`. Il blocco "else" viene eseguito solo se non vengono sollevate eccezioni nel blocco "try", il che è utile per il codice che dovrebbe essere eseguito solo in caso di successo. Il blocco "finalmente" viene eseguito *sempre*, indipendentemente dal fatto che si sia verificata un'eccezione, rendendolo il luogo perfetto per pulizie come la chiusura di file o connessioni al database.
Codice e output di esecuzione
Questo script dimostra una solida gestione degli errori in Python utilizzando try, tranne, altro e infine.
def divide_numbers(a, b):
try:
# Code that might raise an exception
result = a / b
except ZeroDivisionError:
# Handling a specific exception
print("Error: Cannot divide by zero!")
except TypeError:
# Handling another exception type
print("Error: Inputs must be numbers!")
else:
# Run only if try block succeeded
print(f"Success! Result of {a}/{b} is {result}")
finally:
# Runs no matter what
print("Division attempt completed.")
divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.Implementazione passo dopo passo
- Inserisci il codice che potrebbe fallire all'interno di un blocco try.
- Rileva tipi di errore specifici con tranne ExceptionType: blocchi per gestire gli errori in modo corretto.
- Utilizzare else per il codice che deve essere eseguito solo in caso di blocchi try riusciti.
- Utilizzare infine per garantire che le azioni di pulizia vengano eseguite indipendentemente dagli errori.
Domande frequenti
Posso catturare più eccezioni in un singolo blocco tranne?
Sì, puoi passarli come tupla: tranne (ValueError, TypeError) come e:.
Come posso sollevare le mie eccezioni?
Utilizzare la parola chiave raise seguita dall'istanza dell'eccezione: raise ValueError("Valore di configurazione non valido").
Argomenti correlati
Scopri come convertire una stringa in un numero intero in Python utilizzando la funzione int(). Gestisci gli errori in modo sicuro e converti i numeri da binario, ottale o esadecimale.
Come leggere un file in PythonScopri come leggere i file in Python. Padroneggia l'istruzione open, readline, readlines e la gestione sicura delle eccezioni dei file.
Come scrivere su un file in PythonScopri come scrivere testo su file in Python. Padroneggia la differenza tra le modalità di scrittura ("w") e di aggiunta ("a") con gestori di contesto sicuri.
Risorse Python consigliate
Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.
Cicli Python
Scopri come utilizzare i loop Python per eseguire iterazioni sui dati. Padroneggia le best practice sui cicli for, while, interruzione, continua e loop con esempi interattivi.
Foglio informativo sui metodi delle stringhe Python
Una guida di riferimento completa per la manipolazione delle stringhe Python. Padroneggia la formattazione, la ricerca, la divisione, la sostituzione e il controllo delle proprietà delle stringhe.
Python vs JavaScript: quale linguaggio di programmazione è il migliore?
Un confronto completo tra Python e JavaScript. Esplora le differenze di sintassi, le prestazioni, i casi d'uso (backend e frontend) ed esempi di codifica.