Python'da Hata Yönetimi
Bu makalede, Python'da hata yönetimini açıklayacağız.
YouTube Video
Python'da Hata Yönetimi
Python'da hata yönetimi genellikle try
, except
, else
ve finally
anahtar kelimeleri kullanılarak yapılır. Bu yapı taşlarını kullanarak programınızda bir hata meydana geldiğinde uygun şekilde yanıt verebilirsiniz. Aşağıda, bunların her birini nasıl kullanacağınızı açıklayacağız.
try
Bloğu
try
bloğu içinde, çalıştırmak istediğiniz kodu yazarsınız. Bu blokta bir hata meydana gelirse, program yürütmesi hemen except
bloğuna geçer.
1try:
2 # Code that may raise an error (division by zero, for example)
3 #number = int(input("Enter a number: "))
4 number = int("abc")
5 result = 10 / number
6 print("Result:", result)
7except ValueError as e:
8 # Handle invalid input (e.g. non-numeric input)
9 print("Invalid input. Please enter a whole number.")
10 print(f"Value error: {e}")
11except ZeroDivisionError as e:
12 # Handle division by zero error
13 print("Cannot divide by zero!")
14 print(f"Zero division error: {e}")
try
bloğunda hataları tespit edip, bunlarıValueError
veyaZeroDivisionError
yakalayarak uygun şekilde ele almanın bir örneğidir.
except
Bloğu
except
bloğu içinde, belirli bir istisna (hata) meydana geldiğinde çalışacak kodu yazarsınız. Meydana gelen hata türüne göre belirli hataları da yakalayabilirsiniz.
1try:
2 #number = int(input("Enter a number: "))
3 number = 0
4 result = 10 / number
5 print("Result:", result)
6except ZeroDivisionError as e:
7 print("Cannot divide by zero!")
8 print(f"Zero division error: {e}")
9except ValueError as e:
10 print("Input was not a valid integer.")
11 print(f"Value error: {e}")
- Bu kod,
try
bloğunda bir hata oluştuğunda,except
bloğunda her bir istisna türü için farklı işlemler yapılmasının bir örneğidir.
Birden fazla istisnanın birlikte yönetilmesi
Birden fazla istisna sınıfı aynı yönetim mantığını paylaşabiliyorsa bir demet (tuple) belirtin.
1try:
2 my_list = [1, 2]
3 result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5 print(f"Exception occurred: {e}")
- Bu kod, hem
IndexError
hem deZeroDivisionError
'ı birlikte yakalayarak istisnaları aynı şekilde ele almanın bir örneğidir.
Hataları şartsız olarak yakalama
Tüm istisna türlerini tek bir blokta yönetmek istiyorsanız, except
için argümanı çıkarın.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")
- Ancak, tüm istisnaları koşulsuz olarak yakalamak yerine, belirli istisnaları ele almak, hata bulma ve hata ayıklama açısından daha faydalıdır. Mümkün olduğunda, yalnızca beklenen istisnaları (
ValueError
veyaTypeError
gibi) açıkça ele almak kodunuzun sağlamlığını artıracaktır.
else
Bloğu
else
bloğu, yalnızca try
bloğu içinde bir hata meydana gelmezse çalıştırılır.
1try:
2 #number = int(input("Enter a number: "))
3 number = 5
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
- Bu kod,
try
bloğunda hata oluşmazsa yalnızcaelse
bloğunun çalıştırılmasının bir örneğidir.
finally
Bloğu
finally
bloğu, try
bloğunda bir hata meydana gelip gelmediğine bakılmaksızın her zaman çalıştırılacak kodu yazmak için kullanılır. Kaynakların serbest bırakılması veya temizlik işlemlerinin gerçekleştirilmesi için faydalıdır.
1try:
2 #number = int(input("Enter a number: "))
3 number = int("abc")
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
14finally:
15 # This block will always execute, regardless of whether an exception was raised
16 print("Execution completed.")
- Bu kod, bir istisna oluşsa da oluşmasa da
finally
bloğunun her durumda çalıştırıldığını gösteren bir örnektir.
raise
anahtar kelimesi
Mevcut kodda belirli koşullar sağlanmadığında, raise
anahtar kelimesini kullanarak bir istisna oluşturmak da mümkündür.
1def divide(a, b):
2 if b == 0:
3 raise ValueError("Cannot divide by zero.")
4 return a / b
5
6try:
7 result = divide(10, 0)
8except ValueError as e:
9 print(f"Error: {e}")
- Bu kod, bir koşul karşılanmadığında
raise
anahtar kelimesi kullanılarak açıkça bir istisna fırlatmanın bir örneğidir.
Sonuç
Hataları bu şekilde yöneterek program çökmesini önleyebilir, kullanıcıya uygun mesajlar gösterebilir ve sonraki program işlemlerine devam edebilirsiniz.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.