Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Skapa Egna Kontexthanterare | Advanced File Handling & Context Managers
Python Strukturell Programmering

Skapa Egna Kontexthanterare

Svep för att visa menyn

För att fullt ut utnyttja kraften hos context managers i Python kan du skapa egna genom att definiera en klass som implementerar metoderna __enter__ och __exit__. Metoden __enter__ anropas när exekveringen går in i kontexten för with-satsen, och dess returvärde tilldelas variabeln efter as. Metoden __exit__ anropas när exekveringen lämnar kontexten, oavsett om det sker normalt eller på grund av ett undantag. Denna design gör det möjligt att säkert och förutsägbart hantera uppsättning och nedmontering av resurser, vilket är särskilt användbart för hantering av filer, nätverksanslutningar eller lås.

Metoden __exit__ tar emot tre argument: exc_type, exc_value och traceback. Dessa ger information om eventuella undantag som inträffat inom kontextblocket. Om __exit__ returnerar True undertrycks undantaget; annars kommer undantaget att fortsätta efter städningen. Genom att implementera dessa metoder kan du exakt styra logiken för uppsättning och städning av dina resurser, vilket gör din kod mer robust och underhållbar.

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

Följande kod visar en anpassad context manager-klass FileLogger. Denna klass är utformad för att öppna en målfil för läsning och en loggfil för att lägga till loggposter. Vid inmatning i kontexten (med with-satsen) loggas händelsen att filen öppnas. Vid utträde ur kontexten – oavsett om det sker genom normal exekvering eller ett undantag – loggas händelsen att filen stängs och båda filerna stängs korrekt. Metoden __exit__ undertrycker inte undantag, vilket gör att de fortsätter efter städningen.

question mark

Vilket påstående beskriver bäst rollen för metoden __exit__ i en anpassad context manager?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 5

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 2. Kapitel 5
some-alt