Lección 13 de 16 · raise, try y except
Excepciones: saltar en el tiempo
Ver que raise abandona la función, destruye su marco y salta al except, saltándose líneas.
Metodología · Criterio
Interrogación elaborativa (los cinco porqués)
¿Por qué lanzar una excepción y no devolver None? Sigue los porqués hasta una consecuencia para quien usa la función.
Metodología · Criterio
Casos con protagonista
Imagina a Ana depurando un retiro que 'no hizo nada': ¿qué línea buscaría primero?
t<0 Antes de ejecutar
Lee el código y comprométete con una predicción
Mientras tanto, Python ya hizo su parte de t<0: leyó y compiló el archivo completo. Ninguna variable existe todavía.
programa.py
1def retirar(saldo, monto): 2 if monto > saldo: 3 raise ValueError("Saldo insuficiente") 4 return saldo - monto 5 6try: 7 nuevo = retirar(100, 150) 8 print("Retiro hecho") 9except ValueError as error: 10 print("No se pudo:", error) 11print("Fin")
t=0 t>0 Ejecución paso a paso
Qué se ejecuta primero y dónde vive cada variable
Avanza con Siguiente paso o las flechas del teclado. Pasa el mouse por una variable para ver a qué objeto apunta.
t=-1
Antes de ejecutar
Python lee y compila el archivo
1def retirar(saldo, monto):2 if monto > saldo:3 raise ValueError("Saldo insuficiente")4 return saldo - monto5 6try:7 nuevo = retirar(100, 150)8 print("Retiro hecho")9except ValueError as error:10 print("No se pudo:", error)11print("Fin")
Salida
(vacía)
Qué pasó
- Antes de ejecutar nada, Python lee el archivo completo y lo compila a bytecode: instrucciones que su máquina virtual entiende.
- Si hubiera un error de sintaxis, el programa fallaría aquí, sin ejecutar ni una sola línea.
- Nombres que aparecen en el código: ValueError, error, monto, nuevo, print, retirar, saldo. Ninguno existe todavía en memoria.
Pila de marcos · dónde viven los nombres
Todavía no hay marcos: ninguna variable existe.
Montón · dónde viven los objetos
Ningún objeto todavía.
Idea clave
raise crea un objeto excepción y Python deja de ejecutar: sale de retirar (su marco se destruye) y busca un except. La línea 8 nunca se ejecuta y nuevo nunca se crea.
t>0 Después: repaso sin mirar
Recupera de memoria
Responde sin volver al paso a paso. Para dominar la lección necesitas 2 de 2.
Explícalo con tus palabras (Feynman)
Dominio de la lección
Aún no
- Falta la predicción (t<0)
- Repaso: 0 de 2 (se necesitan 2)