Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Oprettelse af brugerdefinerede kontekstadministratorer | Advanced File Handling & Context Managers
Python Strukturel Programmering

Oprettelse af brugerdefinerede kontekstadministratorer

Stryg for at vise menuen

For at udnytte kraften i context managers fuldt ud i Python, kan du oprette dine egne ved at definere en klasse, der implementerer metoderne __enter__ og __exit__. Metoden __enter__ kaldes, når eksekveringen går ind i konteksten af with-sætningen, og dens returværdi tildeles variablen efter as. Metoden __exit__ kaldes, når eksekveringen forlader konteksten, uanset om det sker normalt eller på grund af en undtagelse. Dette design gør det muligt at opsætte og nedbryde ressourcer sikkert og forudsigeligt, hvilket især er nyttigt til håndtering af filer, netværksforbindelser eller låse.

Metoden __exit__ modtager tre argumenter: exc_type, exc_value og traceback. Disse giver detaljer om eventuelle undtagelser, der opstod inden for kontekstblokken. Hvis __exit__ returnerer True, undertrykkes undtagelsen; ellers vil undtagelsen blive videreført efter oprydning. Ved at implementere disse metoder kan du præcist kontrollere opsætning og oprydning for din ressource, hvilket gør din kode mere robust og vedligeholdelsesvenlig.

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ølgende kode demonstrerer en brugerdefineret context manager-klasse FileLogger. Denne klasse er designet til at åbne en mål-fil til læsning og en logfil til at tilføje logposter. Når konteksten indtrædes (ved brug af with-sætningen), logges filåbningshændelsen. Når konteksten forlades – uanset om det sker ved normal eksekvering eller en undtagelse – logges fil-lukningshændelsen, og begge filer lukkes korrekt. Metoden __exit__ undertrykker ikke undtagelser, hvilket betyder, at de vil blive videreført efter oprydning.

question mark

Hvilken påstand beskriver bedst rollen for metoden __exit__ i en brugerdefineret context manager?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 5

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 2. Kapitel 5
some-alt