Python Hata Yakalama ve İstisnalar

Merhaba Arkadaşlar,

Mobilhanem.com da Python Dersleri serisinin bu dersin de Hata Yakalama ve İstisnalar  göreceğiz.

Öncelikle arkadaşlar Python Dersleri serisinde baya yol aldık. Artık basit de olsa uygulama geliştirebilecek seviyeye geldik. Python  da Yorum satırı dersini anlatırken kod yazmak kadar kodları okunabilir şekilde yazmanın da önemli olduğunu söylemiştik. Peki biz burada geliştiriciler için böyle bir sorunu ve çözümünü anlatırken son kullanıcılar için bir şey demeden mi geçeceğiz tabi ki hayır biz bu derste geliştiriciler yanı sıra son kullanıcılarında karşılaşabileceği hataları ve bu hatalara karşı çözüm yollarını da anlatmaya çalışacağız.

Hata Türleri

Biz yukarıda geliştiriciler ve son kullanıcıların karşılaşabileceği hatalardan bahsettik peki bu hata türleri nelerdir. Arkadaşlar genel olarak hataları üç farklı  şekilde sıralayabiliriz.

  1. Programcı Hatası(Error)
  2. Program Kusurları veya Mantık Hatası(Bug)
  3. İstisnalar(Exception)

Şimdi bu hataları teker teker ayrıntılı şekilde ele alalım .

Programcı Hatası(Error)

Bu hata programcı veya geliştiricilerden kaynaklanan bir hatadır.

Programcının syntax   yazılım yanlışı vb. yaptığı hatalardır bu hata giderilmeden program hiçbir şekil de çalışmaz. Bu tür hataların fark edilmesi  ve çözülmesi kolaydır.

Hemen basit bir örnekle gösterelim;

Gördüğünüz gibi bir syntax hatası verdi. Ayrıca doğru kullanımı da bize gösterdi.

Bu hata çözülmeden program hiçbir şekilde çalışmayacaktır.

Program Hatası veya Mantık Hatası(Bug)

Bu hata türünün fark edilmesi bir önceki hata türünü ne göre zordur. Sebebi ise program çalışır durumdadır herhangi bir hata vermez ama istediğimiz sonuçtan farklı bir sonuç veya çıktı veriyor olmasıdır.

Mesela biz dışarıdan bir dairenin yarıçapını alalım ve bu değere göre dairenin alanını hesaplayalım;

Bu şekilde programımız hata vermeden çalıştı ama formül hatası olduğu için istediğimiz sonuçtan farklı bir hata sonuç verdi.Bu türden hataları fark etmek zordur.

 İstisnalar(Exception)

Bu tür hatalarda da program bazı istisnalar‘dan dolayı hata verir. Bu tür hatalarda da program hata düzeltilmeden çalışmaz. Örneğin dışarıdan iki sayıyı alıp birinci sayıyı ikinci sayıya bölüp sonucu ekran veren programı yazalım.

Program normal koşullar da istediğimiz sonucu hatasız bir şekilde verir. Ama bazı istisnalar da bu program hata verir. Örneğin;

ZeroDivisionError: division by zero

İkinci sayıyı sıfır girdiğimiz zaman hata verdi çünkü biz herhangi bir sayının sıfıra bölünmesi tanımsızdır.

Şimdi biz böyle bir hata verdiğinde nasıl bir işlem yapabiliriz mesela;

Şimdi işin püf noktasına değineceğiz burada aldığımız hata bir programı yazan veya geliştiren kişi olarak az çok anlaşılabilir. Ama son kullanıcı için bu hata anlaşılmaz bir hatadır.

İşte bizde bu bölümde son kullanıcın hatayı veya istisnaları anlaşılabilir bir şekilde göstermeyi göreceğiz.

İşte burada  try ve except kavramlarına değineceğim.

Try…  except…

Peki bu kavramlar nedir ve nasıl kullanılır gibi sorular kafanızda oluşmuştur.  Try … except birer bloktur. Peki bu bloklar ne işe yarar bu bloklar bir hatayla karşılaştığımız herhangi bir işlem yapmamızı sağlayan bloklar dır. En basiti bir hatayla karşılaştığımızda kullanıcıya geriye dönük bir mesaj vermektir

Try:

Hata ile karşılaşabileceğimiz yerleri blok içine aldığımız kısım

Except:

Hataya göre göre yapılacak işlemler.

Bu şekilde bir hata ile karşılaştığımız da kullanıcıya bir mesaj verdik peki sadece bir istisnaya karşı mı önlem alabiliyor muyuz diye kafanıza takılmıştır.

Yani şu şekilde kullanıcı sayı dışında bir karakter girerse o zaman ne olacak bu seferde şu şekilde bir istisna ile karşılaşacağız;

Yani veri türü hatası aldık.

Tabi ki hayır istediğiniz kadar hataya karşı önlem alabilirsiniz.

Bu şekilde birden fazla hataya karşı nasıl önlem alabileceğimizi öğrenmiş olduk. Ama burada hala bir eksiklik var nasıl yani derseniz şimdi biz iki hatayı aynı blok içine yazdığımız için  burada bir belirsizlik var kullanıcı acaba hangi hatayı yaptım derdine düşecektir. Bu yüzden hatları ayrı bloklar içine almamız doğru olacaktır.

Şimdi kafanıza bir soru daha gelmiştir. Bütün hataları yani istisnaları nereden bileceğiz yani hepsini tekrar girmek zorunda mıyız.  Tabi ki hayır. Eğer siz except bloğuna hatayı yazmazsanız yorumlayıcı yazılan hata türleri dışında bütün hataları kapsayacaktır if else deki else ifadesi gibi 🙂

Bu şekilde bunu da öğrenmiş olduk bitti peki tabi ki hayır 🙂 Şimdi biz hata ile karşılaştığımızda hatayı mesaj olarak verdik ama hatanın birde  açıklaması var. Yani nasıl bir hata yapılmış ve bu hatanın nasıl çözüleceğini de bize  veriyor. Bir önceki örnekler şu şekilde bir hata vardı;

SyntaxError: Missing parentheses in call to ‘print’. Did you mean print(“Python Dersleri”)

Missing parentheses in call to ‘print’. Did you mean print(“Python Dersleri”) kısmı hatanın açıklamasıdır. Biz dilersek bunu da mesaj olarak verebiliriz. Nasıl mı ? Hemen bir örnekle göstereyim;

Gördüğünüz gibi hata açıklamasını bize mesaj olarak verdi. Program herhangi bir hata bize göstermedi çünkü biz bu hatayla karşılaşırsak bunu yap dedik. Yani hatanın açıklamasını mesaj olarak ver.

try… except… finally

Biz hata ile karşılaştığımızda bazı işlemler yaptırdık. Ama bazen öyle işlemler oluyor ki hata olsa da olmasa da  mutlaka yapılması gereken işlemler. Örneğin  bir dosyayı açıp üzerinde herhangi bir işlem yaptıktan sonra mutlaka dosyayı kapatmamız lazım. İşte burada finally bloğunu kullanıyoruz.

Raise:

Bazen biz kendimiz hata herhangi bir hatayı sistem hatası gibi gösterebiliriz. Örneğin bir dairenin alanını hesaplayan bir uygulama yapalım burada dikkat etmemiz gerek şey; yarıçap sıfır ve sıfırdan küçük bir değer olamaz. Hemen uygulamayı yapalım;

Eğer sıfır veya sıfırdan küçük bir değer girersek şu şekilde bir çıktı alırız:

Bir Python dersinin daha sonuna geldik.  Sizden isteğim sadece okuma ile kalmayın farklı uygulamalar yapmanız. Uyulamalar için buraya bakabilirsiniz.

Mobilhanem.com da Python da Hata Türleri ve İstisnalar dersinin sonuna geldik. Bir sonraki derste Python da Dosya işlemlerini anlatacağım. Bir sonraki derste görüşmek üzere 🙂

Tüm Python Eğitimleri

Cahit İşleyen

Fırat Üniversitesi Yazılım Mühendisliği
Python ve Linux sever.
Çay tiryakisi

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?