Python’da “With” İfadesi

With ifadesi Python üzerinde bir blok içerisindeki kodları iki metot arasına almamızı sağlar. Klasik bir örnek olarak;

Burada blok içinde kodumuz çalışmadan önce ve sonra çalışan dosya açma ve kapama olmak üzere iki fonksiyonumuz vardır.

With üzerinde kullanabilmek için kendimiz de sınıflar oluşturabiliriz. Kullanılacak sınıf içerisinde __enter__ ve __exit__ metotları bulunmalı. Aşağıdaki Ornek sınıfımız with ile kullanıldığında ona verilen Sayi sınıfından bir örneğin değerini, blok çalışmadan önce ve sonra konsola yazar.

Peki with bloğumuz bitmeden bir hata oluşursa ne olur? With ifadesi burada oluşan exception’u yakalar ve exit metodunu uygun parametrelerle çağırır. Yani exit durumda çağrılan bir fonksiyon fakat burada bir hata olup olmadığı kontrolü yapmak yazılımcıya kalmış bir durum.

With üzerinde kullanmak için sınıf yerine bir Generator Fonksiyon‘da kullanabiliriz. Pytohn üzerinde bulunan contextlib modülünden contextmanager dekoratörü ile bir generator fonksiyonu with üzerinde kullanıma uygun hale getirebiliriz. Satır sayısı olarak daha az gibi gözükse de sınıf kullanmak daha anlaşılır olacaktır.

Bir Cevap Yazın