- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
Temel try-except yapısı hataları yakalamayı sağlarken, ileri düzey hata yönetimi, hataların nedenini daha açık ve spesifik hale getirmeyi hedefler.
Python'daki tüm istisnalar (ValueError, TypeError vb.) temel Exception sınıfından türetilmiştir. Kendi özel hata sınıflarınızı tanımlamak, uygulamanızın mantığına özgü hataları yakalamayı ve iletmeyi sağlar.
Diyelim ki bir kullanıcı girişi bekliyorsunuz. Geleneksel olarak ValueError fırlatabilirsiniz. Ancak, özel bir hata fırlatmak, hatanın nedenini daha açık hale getirir.
Örnek Senaryo: Bir kullanıcının yaşı 0'dan küçük girilemez.
Kendi özel istisna sınıfınızı tanımlamak için, onu sadece Exception sınıfından miras almanız yeterlidir.
# 1. Exception sınıfından miras alarak özel hata sınıfımızı
#tanımlıyoruz
class GecersizYasHatasi(Exception):
"""Yaşın sıfırdan küçük veya çok büyük girilmesi durumunda fırlatılır."""
# __init__ metodunu özelleştirerek mesaj ekleyebiliriz
def __init__(self, yas_degeri):
self.yas = yas_degeri
self.message = f"Hata: Yaş değeri ({self.yas})
geçerli aralığın dışındadır (0-150)."
# Miras aldığımız Exception sınıfının init metodunu
#çağırıyoruz
super().__init__(self.message)
def yas_kontrolu(yas):
if not 0 <= yas <= 150:
# Kendi özel hatamızı fırlatıyoruz
raise GecersizYasHatasi(yas)
return f"Yaşınız {yas}, kontrol başarılı."
# Kullanım:
try:
print(yas_kontrolu(180))
except GecersizYasHatasi as e:
# Hata yakalandığında, özel mesajımız ekrana basılır
print(f"Özel Hata Yakalandı: {e}")
# print(f"Hatalı Yaş Verisi: {e.yas}")
Bazen bir hata yakalandığında, bu hatanın nedeni başka bir altta yatan (underlying) hatadır. İstisna zincirleme, asıl hatayı gizlemeden, üzerine yeni bir hata fırlatmanızı sağlar.
Bu, bir API çağrısı başarısız olduğunda, bu başarısızlığın kök nedeninin bir veritabanı bağlantı hatası olduğunu göstermek için önemlidir.
from Anahtar KelimesiZincirleme, raise <YeniHata> from <OrijinalHata> söz dizimi ile yapılır.
class VeriIslemeHatasi(Exception):
"""Genel Veri İşleme Hataları için."""
pass
class BaglantiHatasi(Exception):
"""Veritabanı bağlantı sorunları için."""
pass
def veritabanina_baglan():
# Diyelim ki burada bir bağlantı hatası oluştu
raise BaglantiHatasi("Veritabanı sunucusuna erişilemedi.")
def veriyi_isleme():
try:
veritabanina_baglan()
except BaglantiHatasi as baglanti_hata:
# Bağlantı hatasını yakala, ancak bunun bir Veri İşleme
#hatasına yol açtığını söyle
# from anahtar kelimesi ile zincirle
raise VeriIslemeHatasi("Veri alınamadı, bağlantı hatası
nedeniyle.") from baglanti_hata
# Kullanım:
try:
veriyi_isleme()
except VeriIslemeHatasi as isleme_hata:
print(f"Ana Hata: {isleme_hata}")
# Zincirleme sayesinde, orijinal hatayı (BaglantiHatasi)
#da görebiliriz.
print(f"Kök Nedeni: {isleme_hata.__cause__}")
# Çıktı:
# Ana Hata: Veri alınamadı, bağlantı hatası nedeniyle.
# Kök Nedeni: Veritabanı sunucusuna erişilemedi.
raise Tek Başına)Bir istisnayı yakalayıp bazı temizlik veya loglama işlemleri yaptıktan sonra, hatayı olduğu gibi yukarı katmana (fonksiyonu çağıran yere) göndermek gerekebilir.
Eğer except bloğu içinde sadece raise komutunu tek başına kullanırsanız, o anda yakalanan hatayı orijinal haliyle (traceback bilgisi dahil) yeniden fırlatır.
def dosya_okuyucu(dosya_adi):
try:
f = open(dosya_adi, 'r')
# ... dosya işlemleri ...
except FileNotFoundError:
print(f"Hata: {dosya_adi} bulunamadı. Loglama yapıldı.")
# Hata yakalandı, loglandı ama yine de programın çökmesi
#isteniyor.
raise # Orijinal FileNotFoundError hatasını yeniden fırlatır
# Kullanım:
try:
dosya_okuyucu("olmayan_dosya.txt")
except Exception as e:
print(f"Program akışı sonlandırıldı. Yakalanan hata: {e}")
Bu üç teknik, Python kodunuzda sadece hataları gizlemek yerine, onları anlamayı, özelleştirmeyi ve izlemeyi sağlayan ileri düzey hata yönetimi prensipleridir.
🔥 Python Kariyerinizi Hemen Başlatın!
Hemen kursumuza kaydolun ve bu güçlü araçları kullanarak profesyonel Python geliştiricisi olma yolunda ilk adımı atın. Kursumuzdaki uygulamalı modüller, sizi sadece bir yazılımcı adayı değil, hazır bir profesyonel haline getirecek. Python Eğitimini Udemy platformunda bulabilirsiniz.
[ Python Eğitimi Sıfırdan İleri Seviye ]
Tıklayın ve Python Eğitimine Hemen Kaydolun!
Yorumlar
Yorum Gönder