A Byte of Python

Aixecant excepcions

Podem aixecar excepcions fent servir la sentència raise. Cal especificar el nom de l'error o excepció i la instància de l'excepció que ha de ser llençada. Aquests errors o excepcions han de ser derivats directament o indirecta de la classe Error o de Exception respectivament.

Com aixecar excepcions

Example 13.2. Com aixecar excepcions

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

class ShortInputException(Exception):
	'''Una classe d'excepció definida per l'usuari.'''
	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)
	# La resta del programa continua com sempre a partir d'aquí
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.'
				
				

Sortida

				
$ 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.
				
				

Com funciona

L'exemple crea una classe d'excepció tot i que podríem haver fet servir qualsevol de les predefinides. La nova classe d'excepció és ShortInputException. Disposa de dos camps - length que guarda la longitud de l'entrada, i atleast que indica la longitud mínima que esperava el programa.

A la clàusula except, mencionem la classe d'error i la variable que emmagatzemarà la correspondent instància d'error o excepció d'una manera anàloga als arguments d'una crida a una funció. Amb la clàusula except fem servir els camps length i atleast per a mostrar un missatge adequat a l'usuari.