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.
- Manejar/Capturar errores en Python.
- Manejar/Capturar errores en Python con tipo de error.
- Capturar cancelación de programa (Control + C) en Python.
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:
1 2 3 |
#Dará error de división por cero y saldrá del programa num1 = 3 numDiv = num1/0 |
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
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:
1 2 3 4 5 6 |
try: ... except: ... finally: ... |
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á:
1 2 3 4 5 6 7 8 9 10 |
#Manejo de errores en Python #Captura de error de divisón por cero try: num1 = 3 numDiv = num1/0 print("Si no se produjera error, continuaría por aquí") except: print("Error al intentar dividir un número entre cero") finally: print("Esto siempre se ejecutará") |

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:
1 2 3 4 5 6 7 8 9 |
#Manejo de errores en Python #Capturar de error de tipo de datos while True: try: edad = int(input("Introduce tu edad: ")) print("Tu edad es de {} años".format(edad)) break except: print("No has introducido un número, vuelve a intentarlo") |
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:
1 2 3 4 5 6 7 8 9 10 11 12 |
#Manejo de errores en Python #Capturar de error por tipo de error #Conversión de números y división por cero try: numero1 = int(input("Introduce un número: ")) numero2 = int(input("Introduce un segundo número: ")) division = numero1 / numero2 print("{} / {} = {}".format(numero1, numero2, division)) except ValueError: print("Debes introducir números") except ZeroDivisionError: print("Has intentado dividir un número entre cero") |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#Manejo de errores en Python #Capturar de error por tipo de error #Conversión de números y división por cero #Mostrar error que devuelve el lenguaje Python try: numero1 = int(input("Introduce un número: ")) numero2 = int(input("Introduce un segundo número: ")) division = numero1 / numero2 print("{} / {} = {}".format(numero1, numero2, division)) except ValueError: print("Debes introducir números") except ZeroDivisionError as ex: print("Has intentado dividir un número entre cero."); print("El error concreto es: {0}, de tipo {1}".format(ex,type(ex))) |
Que devolverá, si se produce el error:
El error concreto es: division by zero, de tipo class ‘ZeroDivisionError’
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#Manejo de errores en Python #Capturar cancelación de programa Control + C while True: try: edad = int(input("Introduce tu edad: ")) print("Tu edad es de {} años".format(edad)) break except ValueError: print("No has introducido un número, vuelve a intentarlo") except KeyboardInterrupt: cerrar = input("\n¿Estás seguro que deseas cerrar el programa? (S/N) ") if cerrar.upper() == "S": print("Aplicación cerrada por usuario") break |
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.