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}")trybloğunda hataları tespit edip, bunlarıValueErrorveyaZeroDivisionErroryakalayarak 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,
trybloğunda bir hata oluştuğunda,exceptbloğ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
IndexErrorhem 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ı (
ValueErrorveyaTypeErrorgibi) 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,
trybloğunda hata oluşmazsa yalnızcaelsebloğ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
finallybloğ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
raiseanahtar 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.