Aprende Python · lección gratuita
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.
try:.except: correspondiente.except ValueError: o except ZeroDivisionError:.except KeyError: atrapa el error de acceder a una clave que no existe en un diccionario.else: se ejecuta solo si no hubo ningún error.finally: se ejecuta siempre, haya o no error.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
# 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. Usarexcept ValueError:en lugar de unexcept:genérico evita esconder fallos reales y hace tu código más fácil de depurar.
| Sintaxis | Qué 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 |
---