Café y Código

10. Errores controlados: try y except 🛡️

¿Para qué sirve?

A veces el código falla: el usuario escribe letras cuando esperás un número, un archivo no existe, una clave no está en un diccionario. Sin manejo de errores, Python muestra un traceback y el programa termina. Con try / except podés atrapar ese fallo, mostrar un mensaje claro y seguir (o salir de forma ordenada).

Lo esencial: tryexcept

El bloque try es “intentá esto”. Si ocurre un error del tipo que indicás en except, se ejecuta ese bloque en lugar de romper todo.

try-basico.py
PYTHON
1 try:
2 valor = int(input("Edad (número): "))
3 print(f"El próximo año tendrás {valor + 1}")
4 except ValueError:
5 print("Eso no es un número entero válido.")

Varios tipos de error

Podés encadenar varios except para reaccionar distinto según el problema. Es buena práctica ser específico (por ejemplo ValueError) antes que un except Exception: muy genérico.

try-varios.py
PYTHON
1 datos = {"oro": 100}
2
3 try:
4 clave = input("Recurso: ")
5 cantidad = datos[clave]
6 print(f"Tenés {cantidad}")
7 except KeyError:
8 print("No conozco ese recurso.")
9 except KeyboardInterrupt:
10 print("Cancelado.")

else y finally

  • else: se ejecuta si el try terminó sin excepción (útil para código que solo debe correr cuando todo salió bien).
  • finally: se ejecuta siempre (haya error o no): ideal para cerrar archivos, liberar recursos o dejar un mensaje de cierre.
try-else-finally.py
PYTHON
1 def dividir(a, b):
2 try:
3 r = a / b
4 except ZeroDivisionError:
5 print("No se puede dividir por cero.")
6 return None
7 else:
8 print("División OK.")
9 return r
10 finally:
11 print("Fin del intento de división.")
12
13 dividir(10, 2)
14 dividir(10, 0)

Lanzar errores con raise

Cuando una regla de negocio falla (por ejemplo “edad negativa”), podés disparar vos mismo una excepción para que quien llama a la función la maneje con try/except.

raise.py
PYTHON
1 def set_edad(e):
2 if e < 0:
3 raise ValueError("La edad no puede ser negativa")
4 return e
5
6 try:
7 set_edad(-5)
8 except ValueError as err:
9 print(err)

🐍 Desafío: número seguro

Pedí un texto al usuario, convertilo a entero con int() dentro de un try. Si falla, mostrá “Ingresá solo dígitos” y no intentes usar el número.

👁️ Ver solución sugerida
Python
PYTHON
1 raw = input("Número entero: ")
2 try:
3 n = int(raw)
4 print("Correcto:", n)
5 except ValueError:
6 print("Ingresá solo dígitos")

Quiz: try / except

Dato curioso: Primera versión pública en 1991; Guido van Rossum. Wikipedia

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.