Repaso
English
PythonAvanzadoPY-13

En un context manager, ¿qué pasa si __exit__ devuelve True?

Opciones

  1. El bloque with se ejecuta otra vez desde el principio
  2. Cualquier excepción lanzada dentro del bloque se suprime (Opción correcta)
  3. El recurso queda abierto hasta que termina el programa
  4. Se llama de nuevo a __enter__ para restaurar el recurso

Respuesta

Cualquier excepción lanzada dentro del bloque se suprime

Por qué

Un context manager (lo que usas con with) tiene __enter__, que se ejecuta al inicio, y __exit__, que se ejecuta al final, aunque haya un error.

Si ocurre una excepción dentro del bloque, Python se la pasa a __exit__. Si __exit__ devuelve True, Python considera el error resuelto y no lo lanza.

Devolver False o None deja que el error continúe.

Recuerda

Si __exit__ devuelve True, se traga la excepción.

Términos clave

Practica esta pregunta en Repaso