English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo articolo, imparerai come utilizzare le frasi try, except e finally per gestire le eccezioni nei programmi Python. Questo ti ispirerà a scrivere codice pulito, leggibile ed efficiente in Python.
Python ha molteEccezioni integrate Quando alcuni errori si verificano, costringono il tuo programma a produrre errori.
Quando si verificano queste eccezioni, causano la sospensione del processo corrente e la trasmissione al processo chiamante fino a quando non vengono gestite. Se non vengono gestite, il nostro programma si bloccerà.
Ad esempio, se la funzione A chiama la funzione B, che a sua volta chiama la funzione C e si verifica un'eccezione nella funzione C. Se l'eccezione non viene gestita in C, l'eccezione verrà passata a B e poi a A.
Se non vengono gestite, verrà lanciato un messaggio di errore e il nostro programma si fermerà improvvisamente.
In Python, è possibile gestire le eccezioni utilizzando la frase try.
Le operazioni che possono causare eccezioni vengono messe nel blocco try e il codice per gestire le eccezioni viene scritto nel blocco except.
Dopo aver catturato l'eccezione, cosa faremo dipende da noi. Questo è un esempio semplice.
# Importare il modulo sys per ottenere il tipo di eccezione import sys randomList = ['a', 0, 2] for entry in randomList: try: print("L'ingresso è", entry) r = 1/int(entry) break except: print("Oops!", sys.exc_info()[0], "è occorso.") print("Prossimo ingresso.") print() print("Il reciproco di", entry, "è", r)
Risultato di output
L'ingresso è a Oops! <class 'ValueError'> è occorso. Prossimo ingresso. L'ingresso è 0 Oops! <class 'ZeroDivisionError'> è occorso. Prossimo ingresso. L'ingresso è 2 Il reciproco di 2 è 0.5
In questo programma, eseguiamo un ciclo fino a quando l'utente inserisce un intero con un inverso valido. La parte che potrebbe causare un'eccezione viene messa nel blocco try.
Se non si verifica alcuna eccezione, il contenuto del blocco except viene saltato e si continua con il flusso di lavoro normale. Tuttavia, se si verifica qualsiasi eccezione, viene catturata dal blocco except.
Qui, usiamo la funzione exinfo() del modulo sys per stampare il nome dell'eccezione e chiedere all'utente di riprovare. Possiamo vedere che i valori 'a' e '1.3' causano ValueError, mentre '0' causa ZeroDivisionError.
Nell'esempio sopra, non abbiamo menzionato alcuna eccezione nell'except clause.
Non è un'abitudine di programmazione buona, perché cattura tutte le eccezioni e le gestisce in modo identico in ogni caso. Possiamo specificare quali eccezioni catturare con le clause except.
Un blocco try può avere un numero qualsiasi di clause except per gestirle in modo diverso, ma solo una clause except viene eseguita quando si verifica un'eccezione.
Possiamo usare un tuple di valori per specificare più eccezioni nell'except clause. Ecco un esempio di pseudocodice.
try: # Eseguire alcuni codici pass except ValueError: # Gestione dell'eccezione ValueError pass except (TypeError, ZeroDivisionError): # Gestione di più eccezioni # Errore di tipo TypeError e ZeroDivisionError pass except: # Gestisci tutte le altre eccezioni pass
In programmazione Python, le eccezioni vengono sollevate quando si verificano errori durante l'esecuzione, ma possiamo utilizzare la parola chiave raise per sollevare manualmente un'eccezione.
Possiamo anche passare un valore all'eccezione per chiarire il motivo per cui è stata sollevata.
>>> raise KeyboardInterrupt Traceback (chiamata più recente in basso): ... KeyboardInterrupt >>> raise MemoryError("Questo è un argomento") Traceback (chiamata più recente in basso): ... MemoryError: Questo è un argomento >>> try: ... a = int(input("Inserisci un numero intero positivo: ")) ... if a <= 0: ... raise ValueError("Questo non è un numero positivo!") ... except ValueError as ve: ... print(ve) ... Inserisci un numero intero positivo: -2 Questo non è un numero positivo!
Le istruzioni try di Python possono avere una clausola finally opzionale. Questa clausola viene eseguita in qualsiasi situazione e di solito viene utilizzata per liberare risorse esterne.
Ad esempio, possiamo connetterci a un data center remoto tramite una connessione di rete, o utilizzare file o grafica utente (GUI).
In tutti questi casi, dobbiamo sempre liberare le risorse, indipendentemente dal fatto che siano state utilizzate con successo. Queste operazioni (chiudere i file, GUI o disconnettersi dalla rete) vengono eseguite nella clausola finally per garantire che vengano eseguite.
Questo è unOperazioni di fileper illustrare questo punto.
try: f = open("test.txt", encoding = 'utf-8') # Esegui operazioni di file finally: f.close()
Questo tipo di costruzione garantisce che i file vengano chiusi anche in caso di eccezione.