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 veexcept
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şmazsaelse
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?
-
try
bloğ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,
else
bloğ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. -
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.