In questo tutorial, imparerai a conoscere diversi tipi di errori ed eccezioni incorporati in Python. Vengono sollevati ogni volta che l'interprete Python incontra errori.
Video: gestione delle eccezioni Python
Possiamo fare alcuni errori durante la scrittura di un programma che portano a errori quando proviamo a eseguirlo. Un programma python termina non appena incontra un errore non gestito. Questi errori possono essere classificati a grandi linee in due classi:
- Errori di sintassi
- Errori logici (eccezioni)
Errori di sintassi Python
L'errore causato dal mancato rispetto della struttura (sintassi) corretta del linguaggio è chiamato errore di sintassi o errore di analisi .
Diamo un'occhiata a un esempio:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Come mostrato nell'esempio, una freccia indica dove il parser si è imbattuto nell'errore di sintassi.
Possiamo notare qui che nell'istruzione :
mancano i due punti if
.
Errori logici Python (eccezioni)
Gli errori che si verificano in fase di esecuzione (dopo aver superato il test di sintassi) sono chiamati eccezioni o errori logici .
Ad esempio, si verificano quando proviamo ad aprire un file (per la lettura) che non esiste ( FileNotFoundError
), proviamo a dividere un numero per zero ( ZeroDivisionError
), o proviamo a importare un modulo che non esiste ( ImportError
).
Ogni volta che si verificano questi tipi di errori di runtime, Python crea un oggetto eccezione. Se non gestito correttamente, stampa una traccia di quell'errore insieme ad alcuni dettagli sul motivo per cui si è verificato l'errore.
Diamo un'occhiata a come Python tratta questi errori:
>>> 1 / 0 Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in ZeroDivisionError: division by zero >>> open("imaginary.txt") Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in FileNotFoundError: (Errno 2) No such file or directory: 'imaginary.txt'
Eccezioni integrate in Python
Le operazioni illegali possono sollevare eccezioni. Ci sono molte eccezioni integrate in Python che vengono sollevate quando si verificano errori corrispondenti. Possiamo visualizzare tutte le eccezioni incorporate utilizzando la local()
funzione incorporata come segue:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
restituirà un modulo di eccezioni, funzioni e attributi incorporati. dir
ci permette di elencare questi attributi come stringhe.
Di seguito sono elencate alcune delle comuni eccezioni integrate nella programmazione Python insieme all'errore che le causa:
Eccezione | Causa dell'errore |
---|---|
AssertionError | Generato quando assert un'istruzione fallisce. |
AttributeError | Generato quando l'assegnazione o il riferimento dell'attributo fallisce. |
EOFError | Generato quando la input() funzione raggiunge la condizione di fine file. |
FloatingPointError | Generato quando un'operazione in virgola mobile fallisce. |
GeneratorExit | Solleva quando close() viene chiamato il metodo di un generatore . |
ImportError | Generato quando il modulo importato non viene trovato. |
IndexError | Generato quando l'indice di una sequenza è fuori intervallo. |
KeyError | Generato quando una chiave non viene trovata in un dizionario. |
KeyboardInterrupt | Generato quando l'utente preme il tasto di interruzione ( Ctrl+C o Delete ). |
MemoryError | Generato quando un'operazione esaurisce la memoria. |
NameError | Generato quando una variabile non viene trovata nell'ambito locale o globale. |
NotImplementedError | Generato con metodi astratti. |
OSError | Generato quando il funzionamento del sistema causa un errore relativo al sistema. |
OverflowError | Generato quando il risultato di un'operazione aritmetica è troppo grande per essere rappresentato. |
ReferenceError | Generato quando un proxy di riferimento debole viene utilizzato per accedere a un referente raccolto in Garbage Collection. |
RuntimeError | Generato quando un errore non rientra in nessun'altra categoria. |
StopIteration | Generato dalla next() funzione per indicare che non ci sono ulteriori elementi da restituire dall'iteratore. |
SyntaxError | Generato dal parser quando viene rilevato un errore di sintassi. |
IndentationError | Sollevato quando c'è un rientro errato. |
TabError | Generato quando il rientro è costituito da tabulazioni e spazi incoerenti. |
SystemError | Generato quando l'interprete rileva un errore interno. |
SystemExit | Elevato dalla sys.exit() funzione. |
TypeError | Generato quando una funzione o un'operazione viene applicata a un oggetto di tipo errato. |
UnboundLocalError | Generato quando viene fatto un riferimento a una variabile locale in una funzione o un metodo, ma nessun valore è stato associato a quella variabile. |
UnicodeError | Generato quando si verifica un errore di codifica o decodifica relativo a Unicode. |
UnicodeEncodeError | Generato quando si verifica un errore relativo a Unicode durante la codifica. |
UnicodeDecodeError | Generato quando si verifica un errore relativo a Unicode durante la decodifica. |
UnicodeTranslateError | Generato quando si verifica un errore relativo a Unicode durante la traduzione. |
ValueError | Generato quando una funzione riceve un argomento di tipo corretto ma valore improprio. |
ZeroDivisionError | Generato quando il secondo operando della divisione o dell'operazione modulo è zero. |
Se necessario, possiamo anche definire le nostre eccezioni in Python. Per saperne di più su di loro, visita Python User-defined Exceptions.
Siamo in grado di gestire queste eccezioni built-in e definiti dall'utente in Python che utilizzano try
, except
e finally
dichiarazioni. Per saperne di più su di loro, visita Python try, tranne e finalmente le dichiarazioni.