Bu makalemizde Python dilini kullanarak yazdığımız kodları çalıştırdığımızda bazı hataların oluşabileceğini ve bu hataların neler olduğunu, hatalar çıktığında hatayı nasıl yakalayacağımızı, hatayı nasıl kullanıcıya göstereceğimizi ve hata çıktığında programımızın çalışma zamanını durdurmadan bunu nasıl yönetebileceğimizi anlatacağız.
Bir programın çalışması sırasında beklenmeyen bir hata oluşabilir. Bu hata, programın çökmesine veya yanlış sonuçlar üretmesine neden olabilir. Hata yönetimi, bu tür hataları yakalayarak programın çalışmasını durdurmadan önce uygun bir şekilde işlemesini sağlar.
Python’da hata yönetimi için “try-except” blokları kullanılır. Bu bloklar, programın hata verebilecek kodlarını içerir. Try bloğu içindeki kodların çalışması sırasında bir hata oluşursa, program except bloğuna geçer ve hata mesajını burada işler.
a = 10 / 0 print(a)
Bu kodu yazdığımızda aşağıdaki gibi ZeroDivision hatası verir.
Burada programın çalışmasını engelleyen hatayı kullanıcıya bir bilgi verecek şekilde tasarlayıp programın çalışmasının devamı sağlanır.
try: a=100/0 except ZeroDivisionError: print("sıfıra bölme hatası") except: print("bir hata oluştu")
Bu örnekte, try bloğu içinde sıfıra bölme hatası oluşuyor. İlk except bloğu, ZeroDivisionError hatasını yakalar ve “Sıfıra bölme hatası” mesajını yazdırır. İkinci except bloğu, başka bir hata türü için kullanılabilir ve bu durumda “Bir hata oluştu” mesajı yazdırılacaktır.
Birçok farklı hata türü vardır ve her hata türü için ayrı bir except bloğu kullanılabilir. Bu sayede program, herhangi bir hata oluştuğunda uygun bir mesaj verebilir ve hata oluştuğunda programın çökmesini önleyebilir.
Hata Türleri
Python’da birçok hata türü vardır. Bu hata türleri şunlardır:
1.SyntaxError: Python kodu yazım hatası içeriyorsa, SyntaxError hatası oluşur. Bu hata, kodun çalıştırılmasından önce ortaya çıkar.
# Hatalı kod print("ibrahim, atlı!" # Doğru kod print("ibrahim, atlı!")
2.NameError: Bir değişken veya fonksiyon tanımlanmadan kullanılmaya çalışılırsa NameError hatası oluşur. Örneğin, tanımlanmamış bir değişkene veya fonksiyona erişim denendiğinde bu hata alınır.
# Hatalı kod print(x) # Doğru kod x = 5 print(x)
3.TypeError: İstenen veri türüne uygun olmayan bir veri kullanıldığında TypeError hatası oluşur. Örneğin, sayı yerine bir dize kullanmaya çalıştığınızda bu hata alınır
# Hatalı kod x = "1" + 3 # Doğru kod x = int("1") + 3
4.IndexError: Bir dizi veya liste elemanına erişilmeye çalışırken belirtilen index numarası geçerli değilse IndexError hatası oluşur. Örneğin, 5 elemanlı bir listede 6. elemana erişmeye çalışırsanız bu hata alınır.
# Hatalı kod listem = [1,2,3,4,5] print(listem[6]) # Doğru kod print(listem[2])
5.KeyError: Bir sözlükte olmayan bir anahtar kelime kullanılmaya çalışılırsa KeyError hatası oluşur.
# Hatalı kod sozlugum = {6:"ankara", 34:"istanbul"} print(sozlugum[21]) # Doğru kod print(sozlugum[6])
6.ValueError: Bir işlevin doğru türde ancak yanlış bir değerle çağrılması durumunda ValueError hatası oluşur. Örneğin, int() işlevine bir dize yerleştirmeye çalıştığınızda bu hata alınır.
# Hatalı kod x = int("Merhaba") # Doğru kod x = int("1")
7.ZeroDivisionError: Bir sayı sıfıra bölünmeye çalışılırsa ZeroDivisionError hatası oluşur.
# Hatalı kod x = 100 / 0 # Doğru kod x = 100 / 1
İyi de ben buradaki her hata türünü bilmek zorunda mıyım dediniz gibi . Tabi ki de hayır işte burada da python yardımımıza koşuyor. Burada Genel bir hata yönetimi yapmış olacağız.
Genel bir hata yönetimi yapmak isterseniz, try-except bloklarında hata türü yerine genel Exception sınıfını kullanabilirsiniz. Bu şekilde, herhangi bir hatanın oluşması durumunda, programın devam etmesine izin verilirken, hatanın türüne bakılmaksızın aynı hata mesajı verilebilir. Örneğin:
try: # kodumuzu buraya yazarız except Exception as e: print("Bir hata oluştu:", e)
Bu kodda, try bloğu içinde belirtilen kodlar çalıştırılırken herhangi bir hata oluşursa, except bloğu çalışır ve e değişkenindeki hata mesajı ekrana yazdırılır. Burada Exception sınıfı, tüm hata türlerinin atasıdır, bu nedenle herhangi bir hata türü oluştuğunda bu blok çalışacaktır. Ancak, genel hata yönetimi yaparken, programın akışını etkileyen özel hata türlerini yakalamak yerine, herhangi bir hatanın oluştuğunda sadece bir hata mesajı göstermek istediğimiz durumlarda kullanılmalıdır.
Hata Yönetimi ile ilgili kapsamlı bir örnek
Gelin şimdi biraz daha konuyu ileri götürelim ve diğer konuları da içerisinde barındıran güzel bir kod yazalım:
Sorumuz şöyle olsun bir tane fonksiyonumuz olsun ve bu fonksiyonumuz içerisinde 1 ile 10 arasında rastgele 5 sayı üretelim, üretilecek beş tane sayıyı toplayalım ve ayrıca bununla kalmayıp burada oluşturulan sayıların toplamını gidip bir başka fonksiyonda beş ile çarpıp iki ile toplayalım En sonunda bunları yaparken de hata kontrollerimizi gerçekleştirelim.
import random def topla(): try: listem=[random.randint(1,10) for i in range(5)] toplam=sum(listem) return toplam except Exception as e: print("Bir hata oluştu",e) def carp(): try: sonuc=topla() sonuc=sonuc*5+2 print("Sonuç :",sonuc) except Exception as e: print("toplam oluşturulurken bir hata oldu ",e) carp()
0 Yorum