Aprende Python · lección gratuita

Lección 24 · Manejo de errores: try/except

Resumen

Hasta ahora, cuando algo salía mal en tu programa (dividir entre cero, convertir texto que no es número, acceder a una clave inexistente), Python lanzaba una excepción y el programa se detenía abruptamente. El manejo de errores te permite anticipar esos fallos y reaccionar con elegancia en lugar de "reventar". El bloque try/except es la herramienta central para esto.

Conceptos

Una excepción es un evento que interrumpe el flujo normal del programa. Por ejemplo, int("hola") produce un ValueError y 10 / 0 produce un ZeroDivisionError. Si no la manejas, el programa termina con un mensaje de error (un traceback). Con try/except envuelves el código riesgoso y defines qué hacer si falla, evitando que el programa se caiga.

La estructura básica es: pones el código peligroso dentro de try: y, justo después, uno o más bloques except que indican qué tipo de error capturar y cómo responder. Es buena práctica capturar el tipo concreto de excepción que esperas, en vez de atrapar todo a ciegas, porque así no ocultas errores inesperados.

try:
    numero = int("abc")   # esto lanza ValueError
    print("Convertido:", numero)
except ValueError:
    print("Eso no es un número válido")

Además del except, existen dos bloques opcionales. El bloque else: se ejecuta únicamente cuando el try terminó sin errores; sirve para el "camino feliz". El bloque finally: se ejecuta siempre, ocurra o no una excepción, y se usa típicamente para liberar recursos (cerrar archivos, conexiones, etc.).

try:
    resultado = 10 / 2
except ZeroDivisionError:
    print("No se puede dividir entre cero")
else:
    print("Resultado:", resultado)   # solo si no hubo error
finally:
    print("Cálculo finalizado")       # siempre se ejecuta

Ejemplos

# 1. Capturar ZeroDivisionError
try:
    print(8 / 0)
except ZeroDivisionError:
    print("Error: division entre cero")

# 2. Capturar ValueError al convertir texto
try:
    edad = int("treinta")
except ValueError:
    print("Edad invalida")

# 3. Capturar KeyError en un diccionario
persona = {"nombre": "Ana"}
try:
    print(persona["edad"])
except KeyError:
    print("La clave no existe")

# 4. Usar else y finally juntos
try:
    n = int("7")
except ValueError:
    print("No es numero")
else:
    print("Numero:", n)
finally:
    print("Listo")
💡 Captura solo el error que esperas. Usar except ValueError: en lugar de un except: genérico evita esconder fallos reales y hace tu código más fácil de depurar.

Cheatsheet

SintaxisQué hace
try:Inicia el bloque de código que puede fallar
except:Captura cualquier excepción
except ValueError:Captura solo errores de valor (ej. int("a"))
except ZeroDivisionError:Captura división entre cero
except KeyError:Captura clave inexistente en un diccionario
else:Se ejecuta si no hubo error
finally:Se ejecuta siempre, haya error o no

---

← Números y matemáticasClases y objetos →

Ver todas las lecciones de Aprende Python →