Python'da Exception Handling (Hata Yönetimi)
Exception handling, program çalışırken oluşabilecek hataları yönetmek için kullanılan bir mekanizmadır. Python'da try, except, else, finally ve raise anahtar kelimeleri kullanılarak uygulanır.
Temel Yapı
try: # Hata oluşturabilecek kodlar result = 10 / 0 except ZeroDivisionError: # Belirli bir hata türü için işlem print("Sıfıra bölme hatası oluştu!") except Exception as e: # Diğer tüm hatalar için genel işlem print(f"Beklenmeyen bir hata oluştu: {e}") else: # Hata oluşmazsa çalışacak kod print("İşlem başarıyla tamamlandı") finally: # Hata olsun veya olmasın her zaman çalışacak kod print("Bu her zaman çalışır")
Exception Türleri
Python'da birçok built-in (yerleşik) exception türü vardır:
BaseException: Tüm exceptionların temel sınıfıException: Tüm built-in, non-system-exiting exceptionlar için temel sınıfArithmeticError: Aritmetik işlem hataları için temel sınıfZeroDivisionError: Sıfıra bölme hatasıOverflowError: Çok büyük sayı hatası
LookupError: Geçersiz key veya index hatalarıIndexError: Liste index hatasıKeyError: Sözlük key hatası
IOError: Giriş/çıkış işlem hatalarıTypeError: Yanlış tip işlemleriValueError: Yanlış değer işlemleriNameError: Tanımlanmamış değişken kullanımıAttributeError: Geçersiz attribute erişimiSyntaxError: Syntax hatasıIndentationError: Girinti hatası
Örnekler
Temel Kullanım
try: num = int(input("Bir sayı girin: ")) print(10 / num) except ValueError: print("Geçersiz sayı formatı!") except ZeroDivisionError: print("Sıfıra bölme hatası!")
Birden Fazla Hata Yakalama
try: # Kod burada pass except (TypeError, ValueError) as e: print(f"Tip veya değer hatası: {e}")
Exception Hiyerarşisi
try: # Kod burada pass except ArithmeticError: print("Aritmetik hata") except ZeroDivisionError: print("Bu kısım asla çalışmaz çünkü ZeroDivisionError ArithmeticError'un alt sınıfıdır")
Else Kullanımı
try: num = int(input("Bir sayı girin: ")) except ValueError: print("Geçersiz giriş!") else: print(f"Girdiğiniz sayı: {num}")
Finally Kullanımı
try: file = open("dosya.txt", "r") content = file.read() except IOError: print("Dosya okuma hatası!") finally: file.close() # Dosya her durumda kapatılır print("Dosya kapatıldı")
Özel Exception Oluşturma
class MyCustomError(Exception): def __init__(self, message): self.message = message super().__init__(message) try: raise MyCustomError("Bu özel bir hata!") except MyCustomError as e: print(f"Özel hata yakalandı: {e.message}")
Exception Zincirleme
try: try: raise ValueError("İç hata") except ValueError as ve: raise RuntimeError("Dış hata") from ve except RuntimeError as re: print(f"Yakalanan hata: {re}") print(f"Sebep olan hata: {re.__cause__}")
En İyi Uygulamalar
Spesifik hataları yakalayın: Genel
Exceptionyerine belirli hata türlerini yakalayın.Hata mesajlarını kaydedin: Hata ayıklama için hata mesajlarını loglayın.
Gereksiz try-except kullanmayın: Sadece hata oluşabilecek kodları try bloğuna alın.
Kaynakları temizleyin: finally bloğunu dosya, ağ bağlantısı gibi kaynakları serbest bırakmak için kullanın.
Özel hata sınıfları oluşturun: Uygulamanıza özgü hata durumları için özel exception sınıfları tanımlayın.
Exception handling, Python'da sağlam ve hataya dayanıklı uygulamalar geliştirmek için kritik bir araçtır. Doğru kullanıldığında programlarınızın beklenmeyen durumlarda daha kontrollü davranmasını sağlar.
Hiç yorum yok:
Yorum Gönder