De "oude" versie van de code in uw try/except-blok zou zijn:
out = open(txtFile, 'w')
for line in gzipHandler:
out.write(line)
out.close()
De met open() ...
contextmanager is hier feitelijk hetzelfde. Python sluit bestanden automatisch wanneer hun objecten vuilnis zijn verzameld (zie vraag 575278 voor details), dus out
wordt gesloten als de functie waarin het zich bevindt, niet meer wordt uitgevoerd. Bovendien zal het besturingssysteem het bestand sluiten wanneer het Python-proces wordt beëindigd als het om een of andere reden catastrofaal mislukt voordat out.close()
wordt uitgevoerd.
De met open()
contextmanager wordt uitgebreid tot ongeveer:
out = open(txtFile, 'w')
try:
for line in gzipHandler:
out.write(line)
finally:
out.close()
Zie de bovenstaande link naar "contextmanager" voor een uitleg. Dus hoe werkt het? Het opent het bestand, voert het codeblok uit en sluit vervolgens expliciet het bestand. Hoe werkt de "oude" versie die ik beschrijf,? Het opent het bestand, voert het codeblok uit en sluit vervolgens impliciet het bestand wanneer het bereik is voltooid of wanneer het Python-proces wordt beëindigd.
Opslaan, maar voor de 'expliciete' versus 'impliciete' onderdelen is de functionaliteit identiek.