Creación de Gestores de Contexto Personalizados
Desliza para mostrar el menú
Para aprovechar al máximo el poder de los gestores de contexto en Python, puedes crear los tuyos propios definiendo una clase que implemente los métodos __enter__ y __exit__. El método __enter__ se llama cuando la ejecución entra en el contexto de la sentencia with, y su valor de retorno se asigna a la variable después de as. El método __exit__ se invoca cuando la ejecución sale del contexto, independientemente de si sale normalmente o debido a una excepción. Este diseño permite configurar y liberar recursos de forma segura y predecible, lo cual es especialmente útil para gestionar archivos, conexiones de red o bloqueos.
El método __exit__ recibe tres argumentos: exc_type, exc_value y traceback. Estos proporcionan detalles sobre cualquier excepción que haya ocurrido dentro del bloque de contexto. Si __exit__ devuelve True, suprime la excepción; de lo contrario, la excepción se propagará después de la limpieza. Al implementar estos métodos, puedes controlar con precisión la lógica de configuración y limpieza de tu recurso, haciendo que tu código sea más robusto y mantenible.
class FileLogger:
def __init__(self, filename, logname):
self.filename = filename
self.logname = logname
self.file = None
self.log = None
def __enter__(self):
self.file = open(self.filename, "r")
self.log = open(self.logname, "a")
self.log.write(f"Opened file: {self.filename}\n")
return self.file
def __exit__(self, exc_type, exc_value, traceback):
if self.file:
self.file.close()
self.log.write(f"Closed file: {self.filename}\n")
if self.log:
self.log.close()
# Do not suppress exceptions
return False
El siguiente código demuestra una clase de gestor de contexto personalizado FileLogger. Esta clase está diseñada para abrir un archivo objetivo en modo lectura y un archivo de registro en modo adjuntar. Al entrar en el contexto (usando la sentencia with), registra el evento de apertura del archivo. Al salir del contexto, ya sea por ejecución normal o por una excepción, registra el evento de cierre del archivo y asegura que ambos archivos se cierren correctamente. El método __exit__ no suprime las excepciones, permitiendo que se propaguen después de la limpieza.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla