Tutorial sul Python - Eccezione di manipolazione
In questa sezione imparerete come gestire le eccezioni di Python. Inoltre, imparerete a sollevare e catturare le eccezioni.
Quando si verifica un’eccezione in un programma, l’esecuzione del programma viene terminata. Ma la maggior parte delle volte, non si preferisce la terminazione anomala del programma, quindi si potrebbe usare la gestione delle eccezioni di Python per evitare il crash del programma.
try...except
Nell’esempio seguente, all’utente viene chiesto di inserire 10 numeri interi. Se l’utente inserisce un altro tipo piuttosto che numeri interi, viene lanciata un’eccezione e vengono eseguite le dichiarazioni nel blocco except
:
>>> n = 10
>>> i = 1
>>> sum = 0
>>> while i <= n:
try:
num = int(input('Enter a number: '))
sum = sum + num
i = i+1
except:
print('Please enter an integer!!')
break
Enter a number: 23
Enter a number: 12
Enter a number: Asd
Please enter an integer!!
>>> print('Sum of numbers =', sum)
Sum of numbers = 35
Si possono anche catturare eccezioni specificate, per esempio, se avviene una divisione per zero, si può catturare l’eccezione corrispondente come:
try:
# statements
except ZeroDivisionError:
# exception handling
except:
# all other exceptions are handled here
Eccezione raise
È possibile forzare una specifica eccezione utilizzando la parola chiave raise
:
>>> raise ZeroDivisionError
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
raise ZeroDivisionError
ZeroDivisionError
>>> raise ValueError
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise ValueError
ValueError
Se avete bisogno di aggiungere alcune informazioni personalizzate all’eccezione auto-alzata, potete aggiungerle nella parentesi dopo il tipo di errore dell’eccezione.
>>> raise NameError("This is a customized exception")
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise NameError("This is a customized exception")
NameError: This is a customized exception
try...finally
Il blocco finally
è opzionale nel blocco try
. Se c’è un blocco finally
, sarà eseguito in ogni caso.
Questo è dimostrato nell’esempio seguente:
>>> try:
raise ValueError
finally:
print('You are in finally block')
You are in finally block
Traceback (most recent call last):
File "<pyshell#23>", line 2, in <module>
raise ValueError
ValueError
Il blocco try...finally
è usato per le azioni di pulizia come quando si lavora con un file, è una buona pratica chiudere il file. Così il file verrà chiuso nel blocco finally
.
Eccezioni di Python Built-in
In questa sezione, conoscerete le eccezioni standard nella programmazione Python.
Le eccezioni sono gli errori di runtime che vengono sollevati durante l’interpretazione. Per esempio, la divisione di un numero qualsiasi per zero creerà un errore di runtime chiamato ZeroDivisionError
.
In Python, ci sono alcune eccezioni integrate che sono descritte di seguito:
Eccezione | Quando viene sollevata? |
---|---|
AssertionError |
quando l’affermazione assert a è fallita |
AttributeError |
quando il riferimento attribute è fallito |
EOFError |
quando nessun dato viene letto dalle funzioni input() e si raggiunge la fine del file. |
FloatingPointError |
quando il calcolo in virgola mobile è fallito |
GeneratorExit |
Quando una coroutine o un generatore è chiuso, si verifica l’eccezione GeneratorExit . |
ImportError |
quando import non riesce a trovare il modulo |
ModuleNotFoundError |
quando il modulo non viene trovato da import . Questa eccezione è una sottoclasse di ImportError . |
IndexError |
quando l’indice di una sequenza non è nell’intervallo. |
KeyError |
quando una chiave di di dizionario non si trova nel dizionario |
KeyboardInterrupt |
quando viene premuto un tasto di interruzione. |
MemoryError |
quando c’è meno memoria per una determinata operazione |
NameError |
quando una variabile non viene trovata |
NotImplementedError |
quando l’attuazione del metodo astratto è necessaria ma non fornita. |
OSError |
quando si verifica un errore di sistema |
OverFlowError |
quando un valore è troppo grande per essere rappresentato. |
RecursionError |
quando il limite di ricorsione supera il numero massimo |
IndentationError |
quando l’indentazione è adeguatamente specificata per la definizione di qualsiasi funzione, classe, ecc. |
SystemError |
quando viene rilevato un errore di sistema |
SystemExit |
quando sys.exit() viene usato per uscire dall’interprete. |
TypeError |
quando un’operazione non è valida per il tipo di dati specificato |
ValueError |
quando una funzione incorporata ha argomenti validi ma i valori forniti non sono validi. |
RunTimeError |
quando l’errore generato non rientra in nessun’altra categoria |
IOError |
quando un’operazione di I/O è fallita. |
UnBoundLocalError |
quando si accede alla variabile locale ma non ha alcun valore |
SyntaxError |
quando c’è un errore di sintassi |
TabError |
quando c’è un’inutile dentellatura delle schede |
UnicodeError |
quando si verifica un errore relativo all’Unicode |
UnicodeEncodeError |
quando si verifica un errore relativo all’Unicode a causa della codifica |
UnicodeDecodeError |
quando si verifica un errore relativo all’Unicode a causa di una decodifica |
UnicodeTranslateError |
quando si verifica un errore relativo all’Unicode a causa della traduzione di |
ZeroDivisionError |
quando un numero è diviso per zero |
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook