Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lage Egendefinerte Kontekstbehandlere | Advanced File Handling & Context Managers
Python Strukturert Programmering

Lage Egendefinerte Kontekstbehandlere

Sveip for å vise menyen

For å utnytte kraften til kontekstbehandlere i Python fullt ut, kan du lage dine egne ved å definere en klasse som implementerer metodene __enter__ og __exit__. Metoden __enter__ kalles når utførelsen går inn i konteksten til with-setningen, og returverdien tilordnes variabelen etter as. Metoden __exit__ kalles når utførelsen forlater konteksten, uavhengig av om den avsluttes normalt eller på grunn av et unntak. Dette designet gjør det mulig å sette opp og rydde opp ressurser på en sikker og forutsigbar måte, noe som er spesielt nyttig for håndtering av filer, nettverkstilkoblinger eller låser.

Metoden __exit__ mottar tre argumenter: exc_type, exc_value og traceback. Disse gir detaljer om eventuelle unntak som oppstod i kontekstblokken. Hvis __exit__ returnerer True, undertrykkes unntaket; ellers vil unntaket bli videreført etter opprydding. Ved å implementere disse metodene kan du ha presis kontroll over oppsett og oppryddingslogikk for ressursene dine, noe som gjør koden mer robust og vedlikeholdbar.

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 viser en egendefinert kontekstbehandler-klasse FileLogger. Denne klassen er laget for å åpne en målfil for lesing og en loggfil for å legge til loggoppføringer. Når man går inn i konteksten (ved bruk av with-setningen), logges hendelsen for filåpning. Når man forlater konteksten – enten på grunn av normal utførelse eller et unntak – logges hendelsen for fil-lukking, og begge filene lukkes korrekt. Metoden __exit__ undertrykker ikke unntak, slik at de blir videreført etter opprydding.

question mark

Hvilket utsagn beskriver best rollen til metoden __exit__ i en egendefinert kontekstbehandler?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 5

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 2. Kapittel 5
some-alt