Python Hatalar ve İstisnalar

Barış Kavuş
3 min readJan 28, 2021

--

https://unsplash.com/photos/Ss3U6bEtKww

Merhaba!

Bu yazıda hata yönetimi konusunu ele alacağız.

Yazılan kod bloğu veya bir program herhangi bir hata ile karşılaştığında çalışmayı durdurur. Bu durumu engellemek için “try”, “except” yapıları kullanılır.

Hata tipleri kabaca 3'e ayrılır;

1. Syntax Errors (Programcı Hataları)

Basit yazım hatalarıdır. Kolayca gözlemlenebilir ve düzeltilebilir. Yazım hatası yapıldığında IDE’ler uyarı verecektir.

2. Logical Errors (Program Hataları)

Bu tip hatalar Debug(breakpoint) ile izlenmediği sürece çözümlenmesi bir hayli zaman alabilir. Breakpoint, program çalıştığında kodun yavaşça okunmasını sağlayan bir debug aracıdır.

3. Runtime Errors (Exceptions-İstisnalar)

Geliştirme aşamasında bir sorun çıkarmazlar. Fakat program çalıştığı anda bu hata ile karşılaşılırsa programı çökertebilirler. Bu durumun engellemek için try-except blokları kullanılır.

Hata çıkma ihtimali olan tüm kodlar try-except bloğu içerisine yazılır. Except yapısı bu hataları yakalar ve hata anında belirtilen işlemi/çıktıyı üretir.

Except’in yanına spesifik bir hata türü yazılmazsa bu blokta karşılaşılan tüm hatalar yakalanır.

Şimdi bu durumu birlikte gözlemleyelim.

İlk önce bir hata ile karşılaşalım;

sayi1 = int(input("İlk sayı: "))
sayi2 = int(input("İkinci Sayı: "))

print(sayi1/sayi2)
ZeroDivisionError

Kullanıcıdan hatalı bilgi girilmesi üzerine ile program çalışmayı durdurdu. İşte bu durumların çok sık yaşanmaması adına bu hataları yakalayacak önlemler alınmalıdır.

try:
sayi1 = int(input("İlk sayı: "))
sayi2 = int(input("İkinci Sayı: "))
print(sayi1/sayi2)

except ZeroDivisionError:
print("Paydaya sıfır girilemez !!")

Görüldüğü üzere kod bloğunda sıfıra bölüm hatası alındığında except bloğu devreye girmiştir. Fakat şu an bu try-except yapısı sıfıra bölüm haricinde diğer hataları yakalayamayacaktır.

try:
sayi1 = int(input("İlk sayı: "))
sayi2 = int(input("İkinci Sayı: "))
print(sayi1/sayi2)

except ZeroDivisionError:
print("Paydaya sıfır girilemez !!")
ValueError

Try-Expect yapısı kullanılmasına rağmen yine hatadan kurtulamadık. Tamam bizde ikinci bir except bloğu açalım o zaman.

try:
sayi1 = int(input("İlk sayı: "))
sayi2 = int(input("İkinci Sayı: "))
print(sayi1 / sayi2)

except ZeroDivisionError:
print("Paydaya sıfır girilemez !!")

except ValueError:
print("Düzgün formatta giriş yapılmadı !!")

Buraki sorun çözülmüş gibi duruyor. Tüm hatalar için tek tek except bloğu yazılırsa hangi adımda hata alındığını kolayca tespit edilebilir. Fakat daha karmaşık kod bloklarında daha farklı hatalar ile karşılaşmak mümkündür.

Bu durumda ne yapacağız ?

try:
sayi1 = int(input("İlk sayı: "))
sayi2 = int(input("İkinci Sayı: "))
print(sayi1 / sayi2)

except:
print("Çalışma esnasında bir hata ile karşılaşıldı..")

Peki spesifik bir hata yönetimi yapmak isteyelim. Fakat program belirttiğimiz hata dışındaki tüm hatalarıda yakalayabilsin;

try:
sayi1 = int(input("İlk sayı: "))
sayi2 = int(input("İkinci Sayı: "))
print(sayi1 / sayi2)

except ValueError:
print("Düzgün formatta giriş yapılmadı !!")

except:
print("Tanımlı olmayan bir hata mevcut..")

Umarım faydalı olmuştur…

Bu yazıdaki tüm kodlara ve farklı içeriklere Github adresimden erişebilirsiniz.

Bir önceki yazıda RFM ile Müşteri Segmentasyonu konusundan bahsetmiştik. Buradan ulaşabilirsiniz.

Yeniden görüşmek dileğiyle.

--

--