Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Creación de Gestores de Contexto Personalizados | Manejo Avanzado de Archivos y Gestores de Contexto
Programación Estructural en Python

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.

question mark

¿Qué afirmación describe mejor el papel del método __exit__ en un gestor de contexto personalizado?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 5

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 2. Capítulo 5
some-alt