ProgramlamaBackend Geliştirici

Python'da with open kullanımının inceliklerini açıklayın. Bir dosya açıldığında/kapatıldığında neler oluyor ve burada hangi tuzaklar var?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

with open(...) as f: — dosyalarla çalışmanın standart yoludur, bağlam yöneticisi üzerinden. Bu yöntemle, Python blok with'ten çıkıldığında dosyanın otomatik olarak kapatılmasını garanti eder, hatta bir istisna oluşsa bile. Bu, dosya tanımlayıcılarının sızmalarını ve dosya kilitlenmelerini önler.

Blok içinde dosyayla f.read(), f.write() gibi nesne yöntemlerini kullanarak çalışabilirsiniz. Bloktan çıktığınızda (hata olsa bile) f.close() metodu çağrılır.

Örnek:

with open('data.txt', 'w') as f: f.write('Merhaba!') # Burada dosya kapatılmıştır

Kandırmaca sorusu.

Sıkça sorulan soru:

open üzerinden açılan bir dosyanın, blok with'ten çıkıldıktan hemen sonra kapanacağından emin olabilir miyim, hatta blok içinde bir istisna oluşursa?

Cevap: Evet, işte bu, bağlam yöneticisinin sözleşmesinin garantisidir: istisnalara bakılmaksızın, bloktan çıkıldığında __exit__ metodu çağrılır ve bu da dosyanın kapanmasına yol açar. Bu, f.close() çağrısına kıyasla en büyük avantajdır.

Bu konudaki inceliklerden habersiz olmanın gerçek hata örnekleri.


Hikaye

Büyük bir projede, log kayıtları open('log.txt', 'a') ile yapılıyordu ve f.write() açıkça çağrılıyordu, ancak f.close() unutuluyordu. Uygulama uzun süre çalıştıktan sonra işletim sisteminin tüm dosya tanımlayıcılarını tüketti, servis çalışmayı durdurdu.


Hikaye

İzleme sisteminde dosyalar sürekli açık tutuluyordu open kullanılarak, istisnalar işlenmiyordu. Hata oluştuğunda dosya açık kalıyordu, bu da başka bir süreçten tekrar açma girişiminde kilitlenmelere yol açıyordu.


Hikaye

Geliştirici büyük bir dosyayı open ile okuma işlemi gerçekleştirdi ve fonksiyonun ortasında hemen return yaptı, dosyayı kapatmadan. Sonuç olarak, böyle birkaç işlem dosya kaynaklarının dolmasına yol açtı ve işletim sistemi yeni açma işlemlerini engellemeye başladı.