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
-
trybloğunda, hata çıkarma ihtimali olan kod bulunur. - Eğer
trybloğunda bir hata oluşursa, Python bu hatayı yakalar veexceptbloğuna geçer.
2. except Bloğu
-
exceptbloğu, bir hata meydana geldiğinde çalışır. - İstisnaların türüne göre farklı
exceptblokları kullanabilirsiniz. Eğer belirli bir hata türü yakalanmak isteniyorsa, hata türüexcept'in yanında belirtilir.
3. else Bloğu
- Eğer
trybloğunda hata oluşmazsaelsebloğ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
-
finallybloğ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?
-
trybloğunda kullanıcıdan bir sayı alınır ve 10 ile bölünmeye çalışılır. - Eğer kullanıcı sayısal olmayan bir değer girerse, ValueError yakalanır ve "Geçersiz bir giriş" mesajı görüntülenir.
- Eğer kullanıcı sıfır girerse, ZeroDivisionError yakalanır ve "Sıfıra bölme hatası" mesajı gösterilir.
- Eğer bir hata olmazsa,
elsebloğundaki işlem yapılır ve sonuç ekrana yazdırılır. - 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. -
elsebloğu, hata olmadan çalışır;finallybloğu, hata olsun ya da olmasın her durumda çalışır. -
raiseanahtar kelimesi, programda manuel olarak hata fırlatmak için kullanılır.