Python Hata Yönetimi

Hata yönetimi, programlarımızın beklenmeyen durumlarla karşılaştığında düzgün bir şekilde çalışmasını sağlamak için kullanılır. Python’da hata yönetimi, try, except, else, ve finally blokları ile gerçekleştirilir. Bu bloklar, hataları yakalamak, gerektiğinde müdahale etmek ve sistematik bir çözüm sunmak için tasarlanmıştır.


1. Hata Yönetimi Temelleri

Temel Yapı

try:
    # Hata oluşturabilecek kod
except:
    # Hata yakalandığında çalışacak kod

Örnek:

try:
    sayı = int(input("Bir sayı girin: "))
    print(f"Girdiğiniz sayının karesi: {sayı**2}")
except:
    print("Bir hata oluştu! Lütfen geçerli bir sayı girin.")

2. Belirli Hataları Yakalamak

Python’da belirli hata türlerini yakalamak için except bloklarında hata türünü belirtebilirsiniz.

Örnek: Belirli Bir Hata Türünü Yakalama

try:
    sayı = int(input("Bir sayı girin: "))
    print(10 / sayı)
except ValueError:
    print("Geçersiz bir sayı girdiniz!")
except ZeroDivisionError:
    print("Bir sayı sıfıra bölünemez!")

3. Birden Fazla Hata Türüyle Çalışma

Birden fazla hata türü için aynı işlem yapılacaksa, bu türleri parantez içinde listeleyebilirsiniz.

Örnek

try:
    sayı = int(input("Bir sayı girin: "))
    print(10 / sayı)
except (ValueError, ZeroDivisionError) as e:
    print(f"Bir hata oluştu: {e}")

4. else Bloğu

Eğer try bloğu başarılı bir şekilde çalışırsa, else bloğu devreye girer. Bu blok, hata oluşmadığında çalıştırılacak kodları içerir.

Örnek

try:
    sayı = int(input("Bir sayı girin: "))
except ValueError:
    print("Geçerli bir sayı girmelisiniz!")
else:
    print(f"Girdiğiniz sayının karesi: {sayı**2}")

5. finally Bloğu

finally bloğu, hata oluşsa da oluşmasa da her zaman çalıştırılır. Genellikle kaynak temizleme işlemleri için kullanılır.

Örnek

try:
    dosya = open("ornek.txt", "r")
    içerik = dosya.read()
    print(içerik)
except FileNotFoundError:
    print("Dosya bulunamadı!")
finally:
    print("İşlem tamamlandı.")

6. Hata Fırlatma (raise)

Bazı durumlarda, programın çalışmasını durdurmak ve özel bir hata fırlatmak isteyebilirsiniz. Bunun için raise ifadesi kullanılır.

Örnek

def pozitif_bölme(a, b):
    if b == 0:
        raise ZeroDivisionError("Bölme işlemi için bölen sıfır olamaz!")
    if a < 0 or b < 0:
        raise ValueError("Sadece pozitif sayılar kullanılabilir!")
    return a / b

try:
    sonuç = pozitif_bölme(-10, 2)
    print(sonuç)
except Exception as e:
    print(f"Hata: {e}")

7. Özel Hata Türleri Tanımlama

Kendi hata türlerinizi oluşturmak için özel bir sınıf tanımlayabilirsiniz. Bu sınıf, genellikle Exception sınıfından türetilir.

Örnek

class NegatifSayıHatası(Exception):
    pass

def kontrol_et(sayı):
    if sayı < 0:
        raise NegatifSayıHatası("Negatif sayılar kabul edilmiyor!")
    return sayı

try:
    kontrol_et(-5)
except NegatifSayıHatası as hata:
    print(f"Hata: {hata}")

8. Pratik Uygulamalar

Kullanıcıdan Doğru Veri Almak

while True:
    try:
        yaş = int(input("Yaşınızı girin: "))
        print(f"Girdiğiniz yaş: {yaş}")
        break
    except ValueError:
        print("Lütfen geçerli bir sayı girin!")

Dosya İşlemlerinde Hata Yönetimi

try:
    with open("veriler.txt", "r") as dosya:
        içerik = dosya.read()
        print(içerik)
except FileNotFoundError:
    print("Dosya bulunamadı. Lütfen dosya adını kontrol edin.")

9. Python’da Sık Kullanılan Hata Türleri

Hata TürüAçıklama
ValueErrorGeçersiz bir değer verildiğinde oluşur.
ZeroDivisionErrorBir sayının sıfıra bölünmesi durumunda oluşur.
FileNotFoundErrorBelirtilen dosya bulunamadığında oluşur.
TypeErrorYanlış veri tipiyle işlem yapılmaya çalışıldığında oluşur.
IndexErrorListede geçersiz bir indeks kullanıldığında oluşur.

Sonuç

Hata yönetimi, programların daha güvenilir ve kullanıcı dostu olmasını sağlar. Python’un sağladığı esnek hata yönetimi yapısı sayesinde kodlarınızı daha dayanıklı hale getirebilirsiniz. Özellikle kullanıcı girişlerinde, dosya işlemlerinde ve matematiksel işlemlerde hata yönetimi kullanarak olası sorunları önleyebilirsiniz.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir