A Byte of Python

Try..Except

Intentarem (try en anglès) llegir una entrada de l'usuari. Ctrl-d i mirem que passa.

		
>>> s = raw_input('Enter something --> ')
Enter something --> Traceback (most recent call last):
  File "<stdin>", line 1, in ?
EOFError
		
		

Python aixeca un error anomenat EOFError que bàsicament indica que s'ha trobat un fi de fitxer on no s'esperava. Això es representa per Ctrl-d).

A continuació veurem com gestionar aquests errors.

Gestió d'excepcions

Podem gestionar les excepcions fent servir la sentència try..except. Bàsicament posem el nostre codi habitual entre un bloc try i tots els nostres controladors d'excepcions al bloc except.

Example 13.1. Gestió d'excepcions

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

import sys

try:
	s = raw_input('Enter something --> ')
except EOFError:
	print '\nWhy did you do an EOF on me?'
	sys.exit() # sortim del programa
except:
	print '\nSome error/exception occurred.'
	# aquí no sortim del programa

print 'Done'
				
				

Sortida

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

$ python try_except.py
Enter something --> Python is exceptional!
Done
				
				

Com funciona

Posem totes les sentències que puguin aixecar un error al bloc try i tractem els errors i les excepcions que es produeixin al bloc except. La clàusula except permet gestionar un error o excepció especificat, però també una llista d'aquests entre parèntesis. Si no s'especifica el nom de cap error o excepció, Python considera que ha de tractar-los tots. Ha d'haver-hi com a mínim una clàusula except associada amb cada clàusula try.

Si no tractem algun error o excepció, es realitza el tractament per defecte: aturar l'execució del programa i escriure un missatge. Ja ens ho em trobat.

També podem afegir una clàusula else associada amb un bloc try..catch, que s'executarà quan no hi hagi cap excepció.

Podem també obtenir la instància de l'excepció, per a disposar d'informació addicional sobre aquesta. Ho podem veure al següent exemple.