Tutorial sul Python - Eccezione di manipolazione

Jinku Hu 30 gennaio 2023
  1. try...except
  2. Eccezione raise
  3. try...finally
  4. Eccezioni di Python Built-in
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
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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