Manejo de Errores
Escribe código que no explote en producción. Aprende a anticipar, capturar y gestionar los fallos con elegancia.
1. Por Qué los Errores son Inevitables
En el mundo real, los datos no siempre llegan con el formato esperado. Una API puede estar caída. Un usuario puede escribir texto donde esperas un número. El código que no maneja errores es código que fallará ante el primer imprevisto.
Python tiene un sistema elegante para esto: el bloque try / except. Es tu red de seguridad profesional.
2. La Estructura Básica: try / except
La idea es simple: "Intenta esto. Si falla, haz aquello".
try:
numero = int(input("Introduce un número: "))
resultado = 10 / numero
print(f"Resultado: {resultado}")
except ZeroDivisionError:
print("Error: No puedes dividir entre cero.")
except ValueError:
print("Error: Eso no es un número válido.")
ZeroDivisionError, ValueError) en lugar de usar un except genérico. Así sabes exactamente qué salió mal.3. El Bloque Completo: else y finally
else
Se ejecuta solo si no hubo ningún error. Perfecto para código que depende del éxito del try.
try:
datos = cargar_archivo("datos.csv")
except FileNotFoundError:
print("Archivo no encontrado.")
else:
procesar(datos) # Solo si cargó bien
finally
Se ejecuta siempre, haya error o no. Ideal para cerrar conexiones o liberar recursos.
conexion = abrir_db()
try:
datos = conexion.query("SELECT...")
except Exception as e:
print(f"Fallo: {e}")
finally:
conexion.close() # Siempre se cierra
4. Errores Comunes en Python
| Error | Cuándo ocurre |
|---|---|
ValueError |
Tipo correcto pero valor inválido. Ej: int("hola") |
TypeError |
Tipo de dato incorrecto. Ej: 5 + "texto" |
KeyError |
Clave inexistente en un diccionario |
IndexError |
Índice fuera del rango de una lista |
FileNotFoundError |
El archivo que intentas abrir no existe |
AttributeError |
Llamar a un método que el objeto no tiene |
5. Lanzar tus Propios Errores con raise
Como arquitecto de código, a veces tú quieres provocar un error si los datos no cumplen tus reglas. Para eso existe raise.
def calcular_raiz(numero):
if numero < 0:
raise ValueError("No se puede calcular la raíz de un número negativo.")
return numero ** 0.5
try:
print(calcular_raiz(-9))
except ValueError as e:
print(f"Error controlado: {e}")
¿Listo para convertirte en un Maestro?
Potencia tu carrera con el Máster Completo: Python de la A a la Z. Domina Ciencia de Datos, ML y Deep Learning.