Explicamos de forma sencilla cómo manejar (controlar) errores en Python. Mostramos por qué capturar los errores y las diferentes formas que podemos utilizar en Python: try…except…finally, con ejemplos. Capturamos error por tipo (ValueError, ZeroDivisionError).

El manejo de errores

En el caso en que no se controlen los errores, las aplicaciones pueden generar errores «extraños» al usuario, e incluso pueden dejar de funcionar. Por ejemplo, supongamos que nuestro programa tiene un «fallo» y divide entre 0 en una operación:

El código anterior dará error y como no lo hemos manejado, la aplicación se cerrará y mostrará:

Traceback (most recent call last):
File «d:\ProyectoA_Python\manejo_errores.py», line 5, in numDiv = num1/0
ZeroDivisionError: division by zero

El manejo de errores

Para evitar este comportamiento se utiliza la captura (manejo) de errores, con ello el programa no se cerrará cuando se produzca el error y, además, podremos mostrar un mensaje personalizado cuando se produzca un error o bien ejecutar algún código adicional.

Manejar/Capturar errores en Python

Para el manejo de errores en Python se utiliza:

De forma que el código que quede entre el try y el except se ejecutará si no se produce error. Si se produce error se ejecutará el código que haya en el except y siempre se ejecutará el código que haya en el finally, tanto si se produce error como sino. El finally puede omitirse.

Veamos un ejemplo con el código que anteriormente daba error de división por cero:

El resultado de la ejecución del código anterior será:

Manejar/Capturar errores en Python

En el siguiente ejemplo pediremos una edad al usuario por consola, mientras no introduzca un número válido la aplicación seguirá pidiendo la edad indefinidamente:

Manejar/Capturar errores en Python

Manejar/Capturar errores en Python con tipo de error

Si queremos «afinar» un poco más y queremos mostrar mensajes personalizados al usuario o ejecutar código cuando se produce un error específico, de algún tipo concreto, también podremos hacerlo con Python.

Por ejemplo, en el caso del error de división por cero, si queremos manejar este error concreto, lo haremos de la siguiente forma:

En el ejemplo anterior vemos que hemos capturados dos tipos de excepciones:

  • ValueError: que sirve para capturar un posible error en la conversión de números. En el ejemplo, si el usuario no introduce un número válido, se capturará con esta excepción y se mostrará el mensaje «Debes introducir un número».
  • ZeroDivisionError: en este caso, capturamos un posible error si el usuario introduce, en el segundo número, un 0, dado que no es posible dividir un número entre cero, por lo que lo capturamos y mostramos el mensaje «Has intentado dividir un número entre cero».

Para mostrar el error que devuelve el propio lenguaje Python, podemos usar el siguiente código:

Que devolverá, si se produce el error:

El error concreto es: division by zero, de tipo class ‘ZeroDivisionError’

Manejar/Capturar errores en Python con tipo de error

Otro ejemplo de tratamiento y captura de errores con Python es el siguiente, donde mostramos la descripción del error que se produce, el tipo de error e incluso podemos mostrar un mensaje personalizado si se produce un error concreto:

Capturar cancelación de programa (Control + C) en Python

También podemos capturar la posible cancelación (Cierre forzado) de un programa por el usuario. Cuando se pulsa la combinación de teclas Control + C en un programa de línea de comandos, se abortará la ejecución del programa. Python permite capturar este cierre «forzado» para hacer cualquier operación antes del cierre, para cancelar el cierre forzado o para mostrar algún mensaje al usuario. Explicamos cómo hacerlo con un sencillo ejemplo:

En el ejemplo anterior, creamos un bucle de forma que el programa pedirá una edad al usuario por consola, si introduce un número, mostrará «Tu edad es de numero años» y se cerrará correctamente. En cambio, si el usuario no introduce un número, el error de conversión será capturado en el except de ValueError y mostrará: No has introducido un número, vuelve a intentarlo. Y si el usuario pulsa las teclas Control + C durante la ejecución del programa, será capturado en KeyboardInterrupt y solicitará al usuario si realmente quiere salir. Si pulsa «S» la aplicación se cerrará, en caso contrario continuará en ejecución en el bucle.

Capturar cancelación de programa (Control + C) en Python