Python Exception Handling

Python Exception Handling

Python Exception Handling (İstisna Yönetimi), bir programın çalışması sırasında meydana gelen hataları kontrol etmek ve yönetmek için kullanılır. Python’da istisnalar, bir hata oluştuğunda programın çökmesini önlemek için düzgün bir şekilde ele alınabilir. Bunun için Python’da try, except, else, ve finally blokları kullanılır.

Exception Handling’in Temel Yapısı

Python’da bir hata meydana geldiğinde, program varsayılan olarak hata mesajı gösterir ve sonlandırılır. Ancak, bu hataları kontrol ederek programın çökmesini önlemek ve kullanıcıya daha açıklayıcı hata mesajları vermek mümkündür. İşte Python'da istisnaların nasıl ele alındığını gösteren temel yapı:

try: # Hata çıkarabilecek kod except <ExceptionType>: # Hata durumunda yapılacak işlemler else: # Hata çıkmazsa yapılacak işlemler finally: # Hata olsa da olmasa da yapılacak işlemler

1. try Bloğu

  • try bloğunda, hata çıkarma ihtimali olan kod bulunur.
  • Eğer try bloğunda bir hata oluşursa, Python bu hatayı yakalar ve except bloğuna geçer.

2. except Bloğu

  • except bloğu, bir hata meydana geldiğinde çalışır.
  • İstisnaların türüne göre farklı except blokları kullanabilirsiniz. Eğer belirli bir hata türü yakalanmak isteniyorsa, hata türü except'in yanında belirtilir.

3. else Bloğu

  • Eğer try bloğunda hata oluşmazsa else bloğu çalışır.
  • Bu blok genellikle hatasız tamamlanan işlemlerden sonra yapılacak işlemler için kullanılır.

4. finally Bloğu

  • finally bloğu, hata oluşup oluşmadığına bakılmaksızın her durumda çalışır.
  • Kaynakları temizlemek (örneğin dosya kapatma) gibi işlemler için kullanılır.

Basit Bir Exception Handling Örneği

try: sayi = int(input("Bir sayı girin: ")) sonuc = 10 / sayi except ValueError: print("Geçersiz bir giriş yaptınız. Lütfen bir sayı girin.") except ZeroDivisionError: print("Sıfıra bölme hatası!") else: print(f"Sonuç: {sonuc}") finally: print("Program sonlandı.")

Bu Örnek Nasıl Çalışır?

  1. try bloğunda kullanıcıdan bir sayı alınır ve 10 ile bölünmeye çalışılır.
  2. Eğer kullanıcı sayısal olmayan bir değer girerse, ValueError yakalanır ve "Geçersiz bir giriş" mesajı görüntülenir.
  3. Eğer kullanıcı sıfır girerse, ZeroDivisionError yakalanır ve "Sıfıra bölme hatası" mesajı gösterilir.
  4. Eğer bir hata olmazsa, else bloğundaki işlem yapılır ve sonuç ekrana yazdırılır.
  5. finally bloğu ise her durumda çalışır ve programın sonlandığını bildirir.

Birden Fazla except Bloğu

Farklı hataları yakalamak için birden fazla except bloğu kullanılabilir. Örneğin, hem ValueError hem de ZeroDivisionError hatalarını ayrı ayrı ele alabilirsiniz:

try: sayi1 = int(input("Birinci sayıyı girin: ")) sayi2 = int(input("İkinci sayıyı girin: ")) sonuc = sayi1 / sayi2 except ValueError: print("Sadece sayısal değerler girin.") except ZeroDivisionError: print("İkinci sayı sıfır olamaz.") else: print(f"Sonuç: {sonuc}")

Tek Bir except Bloğunda Birden Fazla Hata Türü

Aynı except bloğunda birden fazla hata türünü yakalamak için parantez içinde hata türlerini belirtebilirsiniz:

try: sayi = int(input("Bir sayı girin: ")) sonuc = 10 / sayi except (ValueError, ZeroDivisionError): print("Geçersiz giriş veya sıfıra bölme hatası!")

raise Anahtar Kelimesi ile Hata Fırlatma

Bazen belirli koşullar oluştuğunda manuel olarak bir hata fırlatmak isteyebilirsiniz. Bunun için raise anahtar kelimesi kullanılır.

def kontrol_et(yas): if yas < 18: raise ValueError("Yaş 18'den küçük olamaz!") else: print("Yaş uygun.") try: kontrol_et(16) except ValueError as hata: print(hata) # "Yaş 18'den küçük olamaz!" mesajı yazdırılır.

finally Bloğunun Kullanım Alanı

finally bloğu genellikle kaynakların serbest bırakılması gerektiği durumlarda kullanılır. Örneğin, bir dosya açıldığında işlem ne olursa olsun dosyanın kapatılması gerektiğinde finally bloğu kullanılır:

try: dosya = open("dosya.txt", "r") icerik = dosya.read() except FileNotFoundError: print("Dosya bulunamadı!") finally: dosya.close() print("Dosya kapatıldı.")

Bu örnekte, hata oluşsa da oluşmasa da finally bloğu çalışır ve dosya kapatılır.

Özel Exception Sınıfı Oluşturma

Python’da kendi özel hata sınıflarınızı da tanımlayabilirsiniz. Bunun için hata sınıfınızı, Python’daki Exception sınıfından türetebilirsiniz.

class Hata(Exception): pass class YasHatasi(Hata): def __init__(self, yas, mesaj="Yaş 18'den büyük olmalı" ): self.yas = yas self.mesaj = mesaj super().__init__(self.mesaj) def kontrol_et(yas): if yas < 18: raise YasHatasi(yas) else: print("Yaş uygun.") try: kontrol_et(16) except YasHatasi as hata: print(hata) # "Yaş 18'den büyük olmalı" mesajı yazdırılır.

Bu örnekte, YasHatasi adında özel bir hata sınıfı oluşturduk ve belirli bir koşul sağlanmadığında bu hata sınıfını kullanarak hata fırlattık.

Özet

  • Exception Handling, programın beklenmedik hatalara karşı korunmasını sağlar.
  • try, hata olabilecek kodları sararken; except, hataları yakalar ve uygun işlemi yapar.
  • else bloğu, hata olmadan çalışır; finally bloğu, hata olsun ya da olmasın her durumda çalışır.
  • raise anahtar kelimesi, programda manuel olarak hata fırlatmak için kullanılır.


Yorum Ekle

Üzerine gel