Cuando el código falla, introducción a las excepciones en Python, 2

Ya hemos visto el uso del bloque _try … except_ para manejar errores de manera general.
Ahora veremos como atrapar errores específicos y así podremos afinar su manejo según el tipo de error.
La nueva versión de nuestro programa es como sigue:

# excepciones_2a.py mini_lista = ['cero', 'uno', 'dos', 'tres', 'cuatro'] try: entrada = input('Escribe la posición del elemento que requieres: ') pos = int(entrada) print('El elemento que solicitaste es: ', mini_lista[pos]) except IndexError: print('¡Error!\nÍndice no disponible\nLas posiciones válidas en mini_lista van de 0 a', len(mini_lista)-1) except Exception as err: print('¡Error!\nOtro tipo de error:', err)
Lenguaje del código: Python (python)

Seguimos usando try. Pero ahora tenemos dos except.

Una es IndexError y otra es igual al ejercicio anterior, una Exception.

IndexError es una de las excepciones incorporadas de Python 3.

En nuestro ejemplo, la excepción IndexError se levanta cuando el índice de una colección no se corresponde con alguno de sus ítems.

Mira cómo provocamos que se levante una excepción IndexError:

> python3 excepciones_2a.py
Lenguaje del código: Bash (bash)
Escribe la posición del elemento que requieres: 6 ¡Error! Indice no disponible Las posiciones válidas en mini_lista van de 0 a 4
Lenguaje del código: Bash (bash)

Un error de índice en una colección no es lo único que podría salir mal en nuestro programa.

¿Qué tal si el valor ingresado por el usuario no es apropiado para indicar un índice?

¿Qué pasa si el usuario escribe una letra o un valor con punto decimal?.

Para tal caso hemos usado una excepción genérica, pero con una pequeña diferencia. Mira esta línea:

... except Exception as err: ...
Lenguaje del código: Python (python)

Le hemos dicho a Python: cuando sea otro tipo de excepción, al levantarla, pásamela con el nombre err:

Vamos a provocar este error ingresando una x en lugar de una usar un número:

> python3 excepciones_2a.py
Lenguaje del código: CSS (css)
Escribe la posición del elemento que requieres: x ¡Error! Otro tipo de error: invalid literal for int() with base 10: 'x'
Lenguaje del código: Bash (bash)

El resultado es que podemos usar a err como un elemento que nos describe la excepción que se ha levantado.

La línea …

print('¡Error!\nOtro tipo de error:', err)
Lenguaje del código: Python (python)

… produce esto:

Otro tipo de error: invalid literal for int() with base 10: 'x'
Lenguaje del código: Bash (bash)

Abundaremos un poco más en las excepciones incorporadas de Python en la siguiente entrada.