CodeBlanks Logo Icon CodeBlanks

Exception yakalama

__exit__ içinde istisna yakalamayı öğrenirsin.

Context manager ile exception yakalama

__exit__ yöntemi blok içindeki hatayı alabilir. True döndürürse hata bastırılır:

class Koruyucu:
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_type is not None:
            print("hata yakalandı")
            return True

with Koruyucu():
    raise ValueError("test")
# hata yakalandı

Burada raise ValueError with bloğunda fırlatılır. __exit__ exc_type ile hatayı algılar ve True döndürerek bastırır. Program çökmez.

Bu, geçici hata bastırma için yararlıdır.

return True ve False farkı

__exit__ True döndürürse hata with bloğunun dışına yayılmaz — sanki yakalanmış gibi. False veya None döndürürse hata normal şekilde yayılır:

# True: hata bastırılır
# False/None: hata yayılır

Bu, try/except'teki except bloğuna benzer. Ama context manager'da bastırma __exit__ içinde yapılır.

Dikkatli kullan — beklenmedik hataları gizlemek tehlikelidir.

Uygulama Koruyucu ile hatayı bastır

class Koruyucu: tanımla. __enter__'da return self yaz. __exit__'te if exc_type is not None: print("hata yakalandı"); return True yaz. with Koruyucu(): bloğu içinde raise ValueError("test") yaz.

Başlangıç kodu

main.py
# Koruyucu sınıfı yaz
# __exit__ ile hatayı yakala ve bastır

Örnek çözüm

main.py
class Koruyucu:
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_type is not None:
            print("hata yakalandı")
            return True

with Koruyucu():
    raise ValueError("test")

Beklenen çıktı

hata yakalandı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 __exit__'te exc_type None ise ne anlama gelir?

  • Hata oluştu
  • Hata olmadı Doğru cevap
  • Program çoktu
  • Hata bastırıldı

Açıklama: exc_type None ise blok içinde hata yoktur.

2 Exception yakalama eşleştir

Kavram Anlamı
exc_type Hata türü
exc_val Hata değeri
return True Hata bastır
return None Hata yay

3 __exit__ imzasını tamamla

Soru
def __exit__(self, ____, exc_val, exc_tb):
Cevap
def __exit__(self, exc_type, exc_val, exc_tb):

Açıklama: exc_type hata türünü taşır.

Orta seviye bölümündeki tüm dersler