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.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår