CRITERIO

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.

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16

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")
¿Se ejecuta print("Retiro hecho")?

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

programa.pyrecién ejecutadasiguiente
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.

¿Existe la variable nuevo al final?
¿Qué le pasa al marco de retirar cuando se lanza la excepción?

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)