En un context manager, ¿qué pasa si __exit__ devuelve True?
Opciones
- El bloque
withse ejecuta otra vez desde el principio - Cualquier excepción lanzada dentro del bloque se suprime (Opción correcta)
- El recurso queda abierto hasta que termina el programa
- 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.