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)