A Byte of Python

Sollevare le eccezioni

Con l'istruzione raise è possibile sollevare (forzare) specifiche eccezioni. Nel primo argomento è necessario menzionare il nome dell'eccezione da sollevare. I programmi possono gestire errori/eccezioni attraverso una nuova classe; di norma errori ed eccezioni dovrebbero derivare in modo diretto o indiretto rispettivamente dalle classi Error o Exception.

Come sollevare le eccezioni

Esempio 13.2. Come sollevare le eccezioni

				
#!/usr/bin/python
# Filename: raising.py

class ShortInputException(Exception):
	'''A user-defined exception class.'''
	def __init__(self, length, atleast):
		Exception.__init__(self)
		self.length = length
		self.atleast = atleast

try:
	s = raw_input('Enter something --> ')
	if len(s) < 3:
		raise ShortInputException(len(s), 3)
# Il resto del codice puo' continuare da qui
except EOFError:
	print '\nWhy did you do an EOF on me?'
except ShortInputException, x:
	print 'ShortInputException: The input was of length %d, \
		was expecting at least %d' % (x.length, x.atleast)
else:
	print 'No exception was raised.'
				
				

Output

				
$ python raising.py
Enter something -->
Why did you do an EOF on me?

$ python raising.py
Enter something --> ab
ShortInputException: The input was of length 2, was expecting at least 3

$ python raising.py
Enter something --> abc
No exception was raised.
				
				

Funzionamento

Nell'esempio abbiamo creato un tipo di eccezione non di default, benché sarebbe stato possibile usarne uno predefinito. Il nuovo tipo è la classe ShortInputException. Ha due campi: length che contiene la lunghezza del dato di input, e atleast che contiene la lunghezza minima che il programma si aspetta in input.

Nella clausola except menzioniamo sia la classe dell'errore che la variabile in cui deve essere memorizzato l'oggetto corrispondente all'errore o all'eccezione sollevata. Si nota una stretta analogia con i parametri e gli argomenti passati nelle chiamate a funzione. All'interno di questa clausola except definita, possiamo usare i campi length e atleast, appartenenti all'oggetto creato, per stampare un appropriato messaggio all'utente.