Cargando tu progreso…

Pokédex Codex

Errores: try / except

META

🎯 Meta: entrar a Kalos, la región de la calidad de código. Acá tu programa deja de explotar ante el primer error: los vas a atrapar con try / except.

Bienvenido a Kalos. 🧪 Hasta ahora, si algo salía mal, tu programa crasheaba. Pero el código real tiene que aguantar imprevistos: un archivo que no está, un número mal escrito, una división por cero. La región de Testing y calidad te enseña a hacer programas robustos.

💥 Qué es una excepción

Cuando Python encuentra un error en ejecución, lanza una excepción y, si nadie la atrapa, el programa muere. Mirá el clásico:

numeros = [10, 20, 30]
print(numeros[5])   # IndexError: list index out of range 💥

🛡️ try / except: atrapar el error

try envuelve el código riesgoso; except dice qué hacer si falla. El programa sigue vivo.

def dividir_seguro(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        return None

print(dividir_seguro(10, 2))   # 5.0
print(dividir_seguro(10, 0))   # None  (no explota)
P: ¿Qué hace el bloque `except` en un `try/except`?
- Evita que el error ocurra
+ Define qué hacer cuando el código del `try` lanza una excepción
- Repite el código del `try` hasta que funcione
> `except` no evita el error: lo **atrapa** después de que ocurre. Define el camino alternativo para que el programa siga vivo en vez de crashear.

🎯 Atrapar el error correcto

Cada error tiene su tipo. Conviene atrapar el específico (no todos a ciegas):

def a_entero(texto):
    try:
        return int(texto)
    except ValueError:
        return 0

print(a_entero("42"))        # 42
print(a_entero("pikachu"))   # 0  (no es un número)
ExcepciónCuándo salta
ZeroDivisionErrordividir por cero
ValueErrorvalor inválido (ej: int("abc"))
IndexErrorposición fuera de la lista
KeyErrorclave inexistente en un dict
TypeErrortipo equivocado

🧹 Atrapar varios casos

def valor(dic, clave):
    try:
        return dic[clave]
    except KeyError:
        return "no encontrado"

pokemon = {"nombre": "Pikachu", "nivel": 25}
print(valor(pokemon, "nivel"))   # 25
print(valor(pokemon, "tipo"))    # no encontrado
TIP

💡 Atrapá solo lo que esperás. Un except: pelado (sin tipo) esconde bugs reales. Mejor except ValueError: que tapar todo.

P: ¿Qué excepción lanza `int("pikachu")`?
- `TypeError`
- `IndexError`
+ `ValueError`
> `ValueError` ocurre cuando el tipo está bien (es un string) pero el valor no se puede convertir. `TypeError` sería si pasaras un tipo completamente incompatible, como una lista.

📝 Resumen

CosaPara qué
excepciónun error que Python lanza en ejecución
try:envolver el código que puede fallar
except TipoError:qué hacer si falla
atrapar el tipo justono esconder otros bugs

➡️ ¿Y ahora qué?

Practicá con los ejercicios de este tema. 💪

ÁNIMO

“El código amateur explota; el código pro atrapa el error y sigue.”