Wyjątek, zamykanie pliku i with
Możesz być ciekawy czy with
na pewno zamyka plik, w przypadku gdy wystąpi wyjątek 😉
I słusznie! Możemy to łatwo przetestować za pomocą prostej konstrukcji try… except
. Utwórz nowy skrypt o nazwie write_file_safe_with.py w katalogu głównym projektu.
Przygotowanie kodu
Umieść w pliku write_file_safe_with.py następującą zawartość:
try: # tutaj umieść operacje na pliku except Exception as e: print(f'Exception: {e}') finally: print(f'In block "finally". Is file closed? {file.closed}')
W bloku finally
mamy print()
za pomocą którego wypiszemy na konsoli informację, czy plik jest zamknięty. Ta informacja jest zawarta w atrybucie file.closed
.
Skorzystajmy teraz ze zmodyfikowanego przykładu z with
gdzie chcemy coś zapisać do pliku otwartego w trybie tylko do odczytu:
with open("./testFiles/fileToWriteWith.txt", mode='r') as file: file.write('Hello jaktestowac.pl!')
Jeśli umieścimy powyższy kod w bloku try
to całość przyjmie postać:
try: with open("./testFiles/fileToWriteWith.txt", mode='r') as file: file.write('Hello jaktestowac.pl!') except Exception as e: print(f'Exception: {e}') finally: print(f'In block "finally". Is file closed? {file.closed}')
Zauważ, że plik jest otwierany jako tylko do odczytu, gdyż tryb dostępu ustawiony jest na mode='r'
. Ma to za zadanie wywołanie wyjątku 😉
Testy with i wyjątku
Upewnij się, że plik fileToWriteWith.txt istnieje. Następnie uruchom skrypt write_file_safe_with.py. Czy wynik jest zgodny z oczekiwanymi? 😉 Na konsoli powinniśmy ujrzeć:
Exception: not writable In block "finally". Is file closed? True
Jak widzisz, nawet w przypadku wystąpienia wyjątku, plik zostaje zamknięty 😉 Konstrukcja with
znacznie upraszcza i ułatwia działania związane z operacjami na plikach 🙂
Podsumowanie
Instrukcja with
posiada wiele niewątpliwych zalet:
- Nie trzeba się martwić o zamykanie plików. Po zakończeniu wszystkich operacji zawartych w instrukcji
with
używane pliki są automatycznie zamykane. - Instrukcji
with
nie trzeba otaczać wyrażeniemtry... except
– gdy wystąpi wyjątek. Plik i tak zostanie poprawnie zamknięty.
with
, to zajrzyj do oficjalnej dokumentacji Compound statements – The with statement. My w kolejnych lekcjach pokryjemy najważniejsze i najczęściej używane zagadnienia związane z with
😉