16 Ekim 2014 Perşembe

Python'da Hata Ayıklama

Programlama ile uğrastığımız sürece hatalar da bunun bir parçası olacaktır. Her zaman hatalarla karşılaşmaya devam edeceğiz. Aslında karşılaştığımız hatalar genellikle kullanıcıdan kaynaklanan hatalar olacak. Bunu bir örnek ile inceleyelim.
sayi = int(raw_input("Bir sayi giriniz: ")) print "Girdiginiz sayi", sayi print "Tesekkurler. Hoscakalin!"
Böyle bir kod yazdığınız zaman bir sorun olmasını beklemeyebilirsiniz. Eğer kullanıcı istediğimiz gibi sadece sayı girerse bir sorun olmayacaktır. Fakat kullanıcının programımızı çalıştırıp sayı yerine biyoinformatik yazdığını düşünürsek şöyle bir hata ile karşılaşacaktır.
Traceback (most recent call last): File "C:/Users/osman/Desktop/dnm.oy", line 1, in <module> sayi = int(raw_input("Bir sayi giriniz: ")) ValueError: invalid literal for int() with base 10: 'biyoinformatik'
Gördüğünüz gibi aldığımız hata programın çalışmasını durdurdu. Yazdığınız programlarda kullanıcıların bu tarz hatalarla karşılaşması olası bir ihtimal. Çok uzun kodlar yazdığınızda arada bu tarz bir hata tüm programın çalışmasını durduracaktır ve hata mesajı verecektir. Verdiği karmaşık hata mesajlarını kullanıcıların anlamasını bekleyemeyiz. İşte bu tarz durumlarda neler yapabileceğimizi anlatmaya çalışacağım bu yazımda.

try... except...

Python'da hata ayıklamak için try... except... bloklarından yararlanılır. Hemen yukarıdaki örnek üzerinde bunu uygulayabiliriz. Normalde kodumuz sayı dışında bir şey girildiğinde hata veriyordu. Şimdi kodu try... except... kullanarak tekrar yazıyorum.
try:
    sayi = int(raw_input("Bir sayi giriniz: "))
    print "Girdiginiz sayi", sayi
except ValueError:
    print "Tesekkurler. Hoscakalin!"
Burada, hata vereceğini bildiğimiz kodları bir try... bloğu içine aldık. Ardından bir except... bloğu açarak, ne tür bir hata beklediğimizi belirttik. Buna göre, beklediğimiz hata türü ValueError. Son olarak da hata durumunda kullanıcıya göstereceğimiz mesajı yazdık. Artık kullanıcılarımız sayı yerine harfe basarsa programımız çökmeyecek, aksine çalışmaya devam edecektir. Dikkat ederseniz print “Tesekkurler. Hoscakalin!” satırı her koşulda ekrana basılıyor. Yani kullanıcı doğru olarak sayı da girse, yanlışlıkla sayı yerine harf de girse programımımız yapması gereken işlemleri tamamlayıp yoluna devam edebiliyor.

Burada en önemli kısım hangi hatayı beklediğinizi bilmektir. Hangi hatayı aldığınıza aşağıdaki kırmızı satırdan bakabilirsiniz. Bu hatayı except... bloğunda kullanıyoruz.
Traceback (most recent call last): File "C:/Users/osman/Desktop/dnm.oy", line 1, in <module> sayi = int(raw_input("Bir sayi giriniz: ")) ValueError: invalid literal for int() with base 10: 'biyoinformatik'

pass Deyimi

pass kelimesi İngilizce’de “geçmek” anlamına gelir. Bu deyimin Python programlama dilinde de bu hemen hemen bu anlama gelir. Bu deyimi Pyhon’da “görmezden gel, hiçbir şey yapma” anlamında kullanacağız. Mesela bir hata ile karşılaşan programınızın hiçbir şey yapmadan yoluna devam etmesini isterseniz bu deyimi kullanabilirsiniz.
try:
    sayi = int(raw_input("Bir sayi giriniz: "))
    print "Girdiginiz sayi", sayi
except ValueError:
    pass
Böylece programınız ValueError ile karşılaştığında görmezden gelerek yoluna devam edecek, böylece programda ters giden bir şey olduğu anlaşılmayacaktır. Yazdığınız programlarda bunun iyi bir şey mi yoksa kötü bir şey mi olduğuna programcı olarak sizin karar vermeniz gerekiyor.

Yukarıda anlatılan durumların dışında, pass deyimini kodlarınız henüz taslak aşamasında olduğu zaman da kullanabilirsiniz. Örneğin, diyelim ki bir kod yazıyorsunuz. Programın gidişatına göre, bir noktada yapmanız gereken bir işlem var, ama henüz ne yapacağınıza karar vermediniz. Böyle bir durumda pass deyiminden yararlanabilirsiniz. Mesela birtakım if deyimleri yazmayı düşünüyor olun.
if .....: böyle yap elif .....: şöyle yap else: pass
Burada henüz else bloğunda ne yapılacağına karar vermemiş olduğunuz için, oraya bir pass koyarak durumu şimdilik geçiştiriyorsunuz. Program son haline gelene kadar oraya bir şeyler yazmış olacağız.

Bu haftalık anlatmak istediklerim bu kadar. Yeni bir konuda görüşmek dileğiyle.


Bilgi paylaştıkça güzelleşir. Paylaşarak öğrenmek dileğiyle.


Osman

Hiç yorum yok:

Yorum Gönderme