Exception yakalama
- Python kursu
- Orta seviye
- Ders 109/116
- 4 dk
__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ırBu, 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
# Koruyucu sınıfı yaz
# __exit__ ile hatayı yakala ve bastırÖrnek çözüm
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
def __exit__(self, ____, exc_val, exc_tb):
def __exit__(self, exc_type, exc_val, exc_tb):
Açıklama: exc_type hata türünü taşır.