Rozdział 15 · Python i akta

Cykl życia pliku i with

with nie jest tylko wygodną składnią, ale gwarantuje poprawne zamknięcie zasobu.

Cykl życia pliku

ZAMKNIĘTE
open()
OTWÓRZ
OTWÓRZ
Czytanie/Zapis
close()
ZAMKNIĘTE
Cykl życia manualny: otwórz → pracę → pamiętaj, żeby zamknąć.

Z menedżerem kontekstu

wejście do with
OTWÓRZ
pracować wewnątrz jednostki
wyjść with automatycznie
ZAMKNIĘTE
with gwarantuje zamknięcie nawet jeśli wewnątrz bloku występuje błąd.
with_protokol.py
with open("privet.txt", "r", encoding="utf-8") as file:
    print(file.closed)   # False — plik otwarty wewnątrz bloku
print(file.closed)       #True – zamyka się podczas opuszczania bloku
with to nie tylko „modna składnia”
with pojawił się w Python 2.5 — nie chodzi tu o nowość, lecz o niezawodne zarządzanie zasobami: nawet jeśli wyjątek pojawi się wewnątrz bloku, protokół menedżera kontekstu i tak zamknie plik w sposób elegancki.

Co dzieje się pod maską

Jest częścią modelu obiektowego Python: obiektów zaangażowanych w with, wspierać specjalne zachowanie przy wchodzeniu i wyjściu z bloku - metody __enter__ oraz __exit__. Nie musisz umieć Pisz własne takie obiekty — wystarczy wiedzieć, że pliki to tylko jedno z zastosowań tego a nie jakiejś funkcjonalności wymyślonej specjalnie dla plików.

Ręczne zamknięcie jest opcją historyczną

ruchnoe_zakrytie.py
file = open("privet.txt", "r", encoding="utf-8")
content = file.read()
file.close()   # nie zapomnieć — i wykonać nawet w przypadku wcześniejszego błędu
with jest nie tylko nowszy, ale i bardziej niezawodny
Ręczne otwieranie/zamykanie nadal działa i spotyka się w starym kodzie, ale with zalecane nie dlatego, że jest nowszy, ale dlatego, że zamknięcie jest gwarantowane, nawet jeśli wystąpi błąd.
Praktyka: cykl życia pliku
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →