Hata Yönetimi – Hata Ayıklama

Python Python - Ders Notları Yazılım

Hata yönetiminde try, except kod bloğu kullanılır.

Aşağıdaki örnekte girilen 1. sayıyı 2.sayıya bölen bir uygulama var. Bölme işlemi için kullanıcının 2 adet sayı girmesi gerekiyor. Eğer kullanıcı sayı yerine farklı bir karakter girerse uygulama hata verir. Kullanıcı ikinci sayıya 0 girerse uygulama hata verir (Hiçbir sayı 0’a bölünemez.) Bu hataların öüne geçmek için try, except kullanıyoruz. Böylece uygulama kesintiye uğramıyor.

try:
    x = int(input("1. sayıyı giriniz: "))
    y = int(input("2. sayıyı giriniz: "))
    bolme = x / y
    print("Bölme sonucu = ",bolme)
except:
    print("Hata oluştu")

Yukarıdaki örnekte uygulama içerisinde nasıl bir hata oluşursa oluşsun “Hata oluştu” mesajı verecektir. Hataları türlerine göre ayırıp onlara özel mesaj verebiliriz.

try:
    x = int(input("1. sayıyı giriniz: "))
    y = int(input("2. sayıyı giriniz: "))
    bolme = x / y
    print("Bölme sonucu = ",bolme)
except Exception as hata:
    print("Hata oluştu. Oluşan hatanın çeşidi : ", hata)

En sık karşılaşılan hata türleri :

  • SyntaxError       : Söz dizimi hatalarıdır. Yazılan kodlarda, noktalama işaretlerinde veya parantezlerde yapılan yanlışlarda bu hata türü ortaya çıkar
  • TypeError         : Bir değişkene veya nesneye yanlış türde bir değer atandığında ortaya çıkar.
  • NameError         : Tanımlanmamış bir değişken veya işlem adı olmadığında ortaya çıkar.
  • IndexError         : Bir liste türü kullanırken aralık dışı bir indeks numarası kullanıldığında ortaya çıkar.
  • KeyError           : Dictionary listesinde olmayan bir key kullanıldığında ortaya çıkar.
  • ValueError         : Veri tipi dönüştürme esnasında uygun olamayn bir dönüştürme olduğunda ortaya çıkar.
  • AttributeError     : Bir nesnede olmayan bir nitelik veya yöntem kullanıldığında ortaya çıkar.
  • IOError           : I/O (Giriş/Çıkış) işlemleri kullanılırken ortaya çıkabilir. Örnek: Dosya okuma ve yazma işlerinde bir başarısızlık olduğunda ortaya çıkar.
  • ZeroDivisionError : Bir sayıyı 0’a bölmeye çalışıldığında ortaya çıkar.
  • ImportError       : İçe aktarma işlemleri sırasında ortaya çıkar. Örnek: Aktarılacak bir modül olmadığında ortaya çıkar.
  • MemoryError       : Bellek ile ilgili bir sorun olduğunda ortaya çıkar. Örnek: Bellek dolduğunda bu hata ortaya çıkar.
  • OverflowError     : Sayısal bir hesaplamanın sonucu çok büyük olduğunda ortaya çıkar.

Hata Türlerini Yönetme

try:
    x = int(input("1. sayıyı giriniz: "))
    y = int(input("2. sayıyı giriniz: "))
    bolme = x / y
    print("Bölme sonucu = ",bolme)
except ZeroDivisionError:
    print("0'a bölüm yapılamaz")
except ValueError:
    print("Girilen değerler sayı olmak zorundadır.")
except Exception as hata:                               # hata değişkeni ile hatanın türünü öğrenebiliriz.
    print("Bilinmeyen bir hata oluştu. Hata : ",hata)
else:                                                   # Hata ortaya çıkmadığı durumlarda çalışır. Kullanmak zorunlu değil.
    print("Hata oluşmadı.")   
finally:                                                # Hata olsun olmasın her türlü durumda çalışır.
    print("Hesaplama bitti.")                       

Hata Nesnesi Ortaya Çıkartma – raise error

a = int(input("0'dan büyük bir sayı giriniz: "))
if(a == 0):
    raise Exception("Girdiğiniz sayı 0 olamaz")

def fnkToplama(a,b):
    if(type(a) is not int or type(b) is not int):
        raise TypeError("Gönderilen sayılar tam sayı olmak zorundadır.")
    else:
        print("Toplam: ",a+b)

fnkToplama(10,20)           # Gönderilen değerler tam sayı olduğu için hata almayacağız.
fnkToplama(10,"isim")       # Gönderilen değerler tam sayı olmadığı için TypeError hatası ortaya çıkacaktır.

Pdb Modülü İle Hata Ayıklama

Hata yıklama sırasında kullanılan klavye kısayolları

  • L : List       => Kodları lisetler.
  • N : Next line => Sonraki satıra geçer.
  • P : Print     => Herhangi bir değişken içeriğini ekrana yazar. Örnek kullanım : p toplam
  • C : Continue   => Kodların çalıştırılmasına devam eder.
import pdb

def fnkToplama(a, b):
    toplam = a + b
    return toplam

x = input("1. sayıyı giriniz : ")
y = input("2. sayıyı giriniz : ")
toplam = fnkToplama(x, y)
pdb.set_trace()                         # Kodları çalıştırdığımızda uygulama burada duracaktır ve yukarıdaki klavye kısayollarını kullanabiliriz.
print(toplam)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir