Cuando desarrollas software en Python, tarde o temprano algo va a fallar: un servidor caído, un usuario que escribe texto donde esperabas un número o una división por cero. Aprender a usar try y except para manejar errores te permite anticipar esos fallos y mostrar mensajes claros en lugar de dejar que el programa se rompa. Es una habilidad clave para cualquier persona que empieza a programar y quiere escribir código robusto.
Por qué necesitas manejar errores al recibir datos
Cada vez que conviertes o recibes datos, abres la puerta a un fallo. Piensa en un servidor de noticias caído: al hacer el request obtienes un error y toda la ejecución se detiene [00:12].
El ejemplo más simple lo ves con una división. Si pides dos números al usuario con la función input, los conviertes a integer y divides el primero entre el segundo, todo funciona bien con 10 y 2. Pero si el usuario escribe 0 como divisor, Python lanza un error porque dividir por cero no está permitido [01:47].
¿Qué hace try except en Python? Ejecuta el bloque dentro de try y, si ocurre un error, salta al bloque except para manejarlo sin detener todo el programa.
python
try:
a = int(input("Digita un número: "))
b = int(input("Digita otro número: "))
resultado = a / b
print(resultado)
except Exception as e:
print(e)
Al envolver el código en un try e indentar, le dices a Python: intenta esto, y si falla, ve al except.
Cómo capturas un error con Exception y la palabra as
La clase Exception es la clase base con la que todos los errores están tagueados [02:31]. Usar except Exception as e te permite guardar el error en la variable e y trabajar con él, ya sea imprimiéndolo o mostrando un mensaje.
Aquí aparece un detalle importante. Si el error ocurre antes de que se defina resultado, verás un segundo fallo porque esa variable nunca llegó a existir. La solución es definir un valor por defecto, como None, para que el programa no se rompa dos veces [03:26].
Con eso resuelto, puedes reemplazar el error técnico que Python muestra a los desarrolladores por un mensaje amable para el usuario, como "Esta división no está permitida, no puedes dividir por cero".
Cuándo debes ser específico con el tipo de error
Capturar todo con Exception funciona, pero esconde información valiosa. Si el usuario escribe "hola" en lugar de un número, Python lanza un ValueError con el mensaje invalid literal for int [05:04]. Ese es un error distinto al de la división.
La recomendación es capturar la excepción real que ocurre. Así evitas atrapar errores que no esperabas y no necesitas llenar tu código de múltiples try y except.
python
try:
a = int(input("Digita un número: "))
b = int(input("Digita otro número: "))
print(a / b)
except ValueError:
print("El valor que digitaste no es un número válido")
except ZeroDivisionError:
print("No está permitido dividir por cero")
Para descubrir qué clase de error debes capturar, imprime e junto con type(e). Eso te muestra exactamente el nombre de la excepción, por ejemplo ValueError o ZeroDivisionError, y así sabes cuál poner en tu except [06:52].
¿Cuál es la diferencia entre ValueError y ZeroDivisionError? ValueError aparece cuando conviertes un dato inválido, como texto a número. ZeroDivisionError ocurre solo cuando intentas dividir entre cero.
Con estos dos except tienes tu código protegido contra los dos errores más comunes del usuario: texto donde esperabas números y una división por cero.
Qué buenas prácticas debes seguir con try except
Controlar errores es útil, pero hay tres recomendaciones clave para no abusar de esta herramienta [09:15]:
- No exageres. Agrega
try y except solo donde realmente esperas errores. Si lo pones en todo tu código, dejará de ser legible.
- Sé específico. No captures todo con
Exception. Ser preciso facilita el debugging y te permite mostrar mensajes de error correctos según cada situación.
- Loguea o muestra cada error en consola. Así, cuando tengas un problema en servidores o en tu código, lo notarás fácil y no quedará oculto dentro del sistema.
Un dato práctico: si tu código estuviera dentro de una función, podrías usar un return dentro del except para detener el resto de la ejecución de forma limpia [08:34].
¿Por qué no debo capturar todos los errores con Exception? Porque ocultas la causa real del fallo y complicas encontrar el problema. Ser específico te da mensajes útiles y un debugging más rápido.
Como reto para practicar, aplica try y except al método que conecta con la News API. Cambia la API key por una inválida, captura el error y muestra un mensaje avisando que la conexión falla porque la clave no es válida. ¿Te animas a intentarlo y contarnos cómo te fue?