Python'da Hata Yönetimi

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 veya ZeroDivisionError 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 de ZeroDivisionError'ı 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 veya TypeError 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ızca else 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.

YouTube Video