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