2.1 Creazione di eccezioni
Se non puoi batterli, unisciti a loro. Se non possiamo evitare che gli errori si verifichino nel programma, dobbiamo imparare a controllarli. E per questo impariamo a creare consapevolmente eccezioni.
L'esempio più semplice di eccezione è la divisione per zero. E il programma è altrettanto semplice:
x = 100 / 0
Questo codice darà un errore:
Traceback (most recent call last):
File "", line 1, in
x = 100 / 0
~~~^~
ZeroDivisionError: division by zero
ZeroDivisionError
è il nome dell'eccezione e division by
zero
è una breve descrizione. Inoltre, Python indicherà il numero di riga dove
questa eccezione si è verificata.
Incompatibilità dei tipi di dati
Ovviamente, sono possibili anche altre eccezioni. Ad esempio, quando si tenta di sommare una stringa e un numero:
s = "100" + 100
Si verificherà l'eccezione TypeError
:
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'str' and 'int'
Indice fuori dai limiti della lista
Un altro errore molto comune che genera un'eccezione è il tentativo di accedere a un elemento che non esiste nella lista:
my_list = [1, 2, 3]
print(my_list[10])
Si verificherà l'eccezione IndexError
:
Traceback (most recent call last):
print(my_list[10])
~~~~~~~^^^^
IndexError: list index out of range
Quante sono in totale? Ci sono migliaia di diversi tipi di eccezioni. Inoltre, puoi crearne di tue, se quelle esistenti non bastano per descrivere una situazione specifica. Tuttavia, le più popolari non sono poi così tante.
2.2 Elenco delle eccezioni più popolari
Ci sono molte eccezioni, ma per te, come principiante, sarà utile conoscere le più popolari. Di seguito fornirò una tabella con esse:
Eccezione | Descrizione |
---|---|
Exception |
Classe base per tutte le eccezioni. |
IndexError |
Si verifica quando si tenta di accedere a un indice inesistente in una sequenza (ad esempio, lista o tupla). |
KeyError |
Si verifica quando si tenta di accedere a una chiave inesistente in un dizionario. |
NameError |
Si verifica quando si tenta di accedere a una variabile inesistente. |
RuntimeError |
Si verifica in caso di errore generico durante l'esecuzione, non riconducibile a altri tipi di eccezioni. |
StopIteration |
Si verifica per segnalare la fine di un'iterazione. |
SyntaxError |
Si verifica in caso di errore sintattico nel codice. |
IndentationError |
Si verifica in caso di errore nei rientri del codice (sottotipo di SyntaxError ). |
TabError |
Si verifica quando si mescolano tabulazioni e spazi per i rientri
(sottotipo di IndentationError ).
|
TypeError |
Si verifica quando si tenta di eseguire un'operazione con tipi di dati incompatibili. |
UnboundLocalError |
Si verifica quando si tenta di accedere a una variabile locale prima della sua dichiarazione
(sottotipo di NameError ).
|
ValueError |
Si verifica quando si passa un argomento con un valore errato a una funzione o operazione. |
ZeroDivisionError |
Si verifica durante la divisione per zero. |
Molto probabilmente, tu, come principiante, incontrerai tutti questi errori nel primo mese di studio. E non c'è niente di male in questo — si impara solo dagli errori.
2.3 Errori nel codice
Analizziamo altre situazioni in cui nel codice si verificano errori, per aiutarti a trovarli più facilmente nel tuo codice:
IndentationError
Questo tipo di errore si verifica quando i rientri nel codice sono fatti in modo errato. Ad esempio, mescolando tabulazioni e spazi o un numero sbagliato di rientri.
def example():
print("Hello")
print("World") # Rientro sbagliato provoca IndentationError
example()
NameError
def example():
print(undeclared_variable) # Tentativo di usare una variabile non dichiarata provoca NameError
example()
ValueError
Questo tipo di errore si verifica quando un'operazione o funzione riceve un argomento del tipo corretto, ma con un valore non appropriato.
def example():
int("abc") # Tentativo di convertire una stringa che non è un numero provoca ValueError
example()
KeyError
Questo tipo di errore si verifica quando il programma cerca di accedere a una chiave inesistente in un dizionario.
def example():
my_dict = {"a": 1, "b": 2}
print(my_dict["c"]) # Accesso a una chiave inesistente provoca KeyError
example()
SyntaxError
Questo tipo di errore si verifica quando nel codice c'è un errore sintattico, cioè il codice non è conforme alla grammatica del linguaggio Python.
def example():
eval("if True print('Hello')") # Sintassi errata provoca SyntaxError
example()
Chi è avvisato, è armato. Ora puoi riconoscere e creare situazioni che causano errori. È arrivato il momento di imparare a gestire questi errori.
GO TO FULL VERSION