En el bloque try se incluye el código que puede producir la excepción y en except el código que la tratará convenientemente. En un bloque except TipoError se capturará un tipo de error concreto, que habrá que indicarlo. Por ejemplo, si se intenta convertir una cadena de texto de caracteres alfabéticos a número entero el tipo es ValueError o si se opera con una variable no declarada el tipo es NameError.
try: # contiene el código que puede producir la excepción
except: # contiene el código que gestionará cualquier error
except TipoError: # contiene el código que gestionará un tipo de error concreto
else: # contiene el código que se ejecutará en caso de no haber error
finally: # contiene el código que se ejecutará en cualquier caso.
El siguiente ejemplo calcula el factorial de un número. Si no se introduce un número entero se producirá una excepción:
try: numero = int(input('Introducir un número: ')) factorial = 1 for num in range(1, numero+1): factorial *= num print(factorial) except: print('Debe introducir un número entero')
A continuación, se utilizan el resto de clausulas disponibles para la gestión de excepciones.
try: # Bloque de código a “vigilar” texto = input('Teclear :') # introducir un dato except KeyboardInterrupt: # captura excepción de interrupción print('\nSe ha pulsado ctrl+c') # Interrupción al presionar Ctrl+c else: # se ejecuta si no hay error print('Ha tecleado {}'.format(texto)) # muestra cadena introducida finally: # se ejecuta tanto si hay error como si no print('fin de programa') # muestra mensaje final
Excepciones a medida
La flexibilidad en la gestión de excepciones se amplia cuando los programadores pueden definir sus propios tipos de errores. Para ello, es necesario crear una clase que herede de la clase Exception o de alguna de sus hijas y después llamarla con raise:
# Define clase a partir de Exception class LongPassw(Exception): '''Excepción definida por usuario''' def __init__(self, longitud): # define método constructor ... Exception.__init__(self) # … de excepción ... self.longitud = longitud # … y con atributo longitud try: # bloque de código a vigilar clave = input('Teclear contraseña: ') # introducir una cadena if len(clave) < 6: # si longitud de cadena es menor de 6 raise LongPassw(len(clave)) # llama a excepción de usuario except LongPassw as lp: # excepción de usuario print('LongPassw: Error por longitud: {0}'.format(lp.longitud)) else: # se ejecuta si no hay error print('No se ha producido error.') # muestra mensaje
De obligado cumplimiento: assert
Con assert se fijan las condiciones que debe cumplir un objeto y si éstas no se cumplen en un momento determinado, producirá una excepción que hay que interceptar y tratar convenientemente.
En el siguiente ejemplo se define una lista con seis elementos. A continuación, mediante un bucle se irán eliminando elementos, uno a uno, desde el final de la lista. La condición establecida para que no se produzca la excepción es que la lista tenga al menos dos elementos. Cuando haya dos y se intente borrar de nuevo se producirá la excepción AssertionError.
try: # bloque de código a vigilar lista = [1, 2, 3, 4, 5, 6] # define lista print(lista) # muestra lista while True: # bucle infinito hasta error print('Elemento a borrar',lista[-1]) lista.pop() # borra elemento assert len(lista) > 1 # la lista debe tener al menos 2 print(lista) # muestra lista después de borrado except AssertionError: # excepción para assert print('Error al intentar borrar elemento ') # mensaje de assert print('La lista debe contener al menos 2')
Ir al índice del tutorial de Python