Hata oluştuğu zaman Python durur ve hata mesajı döndürür.
try
ifadesi sayesinde hata yakalanıp kodun durması engellenebilir.
Python’da hata yakalama işlemi 4 temel öğe sayesinde gerçekleşir.
try
ifadesi ile geliştirilen kod bloğu çalıştırılabilir.
except
ile oluşabilecek hata sonrasında çalıştıracak kodları içerir.
else
ile hata oluşmaz ise çalıştırılacak kodları kapsar.
finally
try-except bloğundan bağımsız bitiminde çalışmasını sağlar.
ÖRNEK KULLANIM:
Sadece değer uyuşmazlığı durumuna dair hatayı yakalamak için örnek kod.
while True: x = input("Bir sayı girin: ") if not x: break try: y = float(x) except ValueError: print("Geçersiz sayı") continue print(y**2)
Herhangi bir hatayı yakalamak için örnek kod.
while True: x = input("Bir sayı girin: ") if not x: break try: y = 1/float(x) except: print("Geçersiz sayı") continue print(y)
Belirli bir tipteki birden fazla hatayı yakalamak için örnek kod.
while True: x = input("Bir sayı girin: ") if not x: break try: y = 1/float(x) except ValueError: print("Geçersiz sayı") continue except ZeroDivisionError: print("Sıfıra bölme") continue print(y)
Hata Durumu Hiyerarşisi
Hata durumları bir nesne hiyerarşisi içinde tanımlanır. Bunların en geneli BaseException
sınıfıdır; diğer daha özelleşmiş hata durumları bunlardan türetilir.
Hata durumları hiyerarşisinin bir bölümü şöyledir (tam bir listeyi Python belgelerinde bulabilirsiniz):
BaseException +-- SystemExit +-- KeyboardInterrupt +-- Exception +-- StopIteration +-- StopAsyncIteration +-- ArithmeticError | +-- FloatingPointError | +-- OverflowError | +-- ZeroDivisionError +-- ImportError | +-- ModuleNotFoundError +-- LookupError | +-- IndexError | +-- KeyError +-- OSError +-- ValueError
İstisna Yakalama
raise
ifadesi ile satır içinde hata yakalanabilir.
ÖRNEK KULLANIM:
x = -1 if x < 0: raise Exception("Sorry, no numbers below zero") x = "hello" if not type(x) is int: raise TypeError("Only integers are allowed")
negatif argüman aldığında ValueError yayınlayan bir faktöriyel fonksiyonu
def faktöryel(x): x = int(x) if x<0: raise ValueError("Negatif değer") p = 1 for i in range(1,x+1): p *= i return p