Hata Yakalama

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