Resim

Python Hata ve İstisnalar

Python Hata ve İstisnalar: Programınızı Güvenli Hale Getirme

Neden Programlar Çöker?

Merhaba! Programlamada iki ana sorun türü vardır:

  1. Hatalar (Errors): Genellikle söz dizimi (syntax) hatalarıdır. Python, bu tür bir hata içeren kodu çalıştırmayı bile reddeder. (Örnek: if sonuna iki nokta (:) koymayı unutmak).

  2. İstisnalar (Exceptions): Kodun söz dizimi doğru olsa bile, çalışma anında (runtime) beklenmedik bir durum oluştuğunda meydana gelir. (Örnek: Sıfıra bölme, var olmayan bir dosyayı açmaya çalışma, kullanıcıdan sayı beklerken metin girilmesi).

İstisnalar ortaya çıktığında, programınız varsayılan olarak durur ve çökme mesajı (Traceback) gösterir. Profesyonel programlamada bu çöküşleri engellemek, kullanıcıyı bilgilendirmek ve programın sorunsuz çalışmaya devam etmesini sağlamak esastır.

1. En Sık Görülen İstisnalar

Python'da yüzlerce farklı istisna türü vardır, ancak bazıları yeni başlayanların en çok karşılaştıklarıdır:

İstisna AdıAçıklamaÖrnek Neden
NameErrorTanımlanmamış bir değişkeni veya fonksiyonu çağırma.print(x) (Eğer x tanımlanmadıysa)
TypeErrorYanlış veri tipinde işlem yapma.'5' + 10 (String ile int toplama)
ValueErrorTip doğru ama değer uygun değil.int("merhaba") (Metni sayıya çevirme girişimi)
ZeroDivisionErrorBir sayıyı sıfıra bölmeye çalışma.10 / 0
IndexErrorBir listenin veya tuple'ın geçerli aralığının dışındaki bir indekse erişim.liste[10] (Liste sadece 5 elemanlı ise)
KeyErrorBir sözlükte (dictionary) var olmayan bir anahtara erişme.sozluk['yok']

2. Hata Yönetimi: try...except Bloğu

Python'da istisnaları yakalamak ve yönetmek için try...except blokları kullanılır.

Söz Dizimi

try:
    # Hata verebilecek kod buraya yazılır
    # Eğer bu blokta bir hata oluşursa, 
    # Python try'dan çıkar ve except bloğuna geçer.
    pass 
except HataTürü:
    # Belirtilen 'HataTürü' oluşursa çalışacak kurtarma kodu.
    # Kullanıcıya bir mesaj gösterilebilir veya varsayılan 
    # bir değer atanabilir.
    pass
  • Örnek: Sıfıra Bölme Hatasını Yönetme

    try:
        sonuc = 10 / 0 
    except ZeroDivisionError:
        print("Hata! Bir sayıyı sıfıra bölemezsiniz.")
        sonuc = None
    
    print(f"İşlem sonucu: {sonuc}")
    # Çıktı: Hata! Bir sayıyı sıfıra bölemezsiniz. İşlem sonucu: None
    

Kendiniz Deneyebilirsiniz:


3. Çoklu İstisnaları Yönetme

Tek bir try bloğu altında, farklı except blokları kullanarak birden fazla istisna türünü ayrı ayrı yönetebilirsiniz.

  • Örnek: ValueError ve ZeroDivisionError Yönetimi

    try:
        sayi = int(input("Bir sayı girin: "))
        bolum = 10 / sayi
        print(f"Sonuç: {bolum}")
    
    except ValueError:
        print("Lütfen tam bir sayı girdiğinizden emin olun.")
    
    except ZeroDivisionError:
        print("Girdiğiniz sayı sıfır olamaz!")
    
    except Exception as e:
        # Yakalanmayan diğer tüm hataları yakalar
        print(f"Beklenmedik bir hata oluştu: {e}") 
    

Kendiniz Deneyebilirsiniz:


4. Opsiyonel Bloklar: else ve finally

Hata yönetimini daha da hassas hale getirmek için try...except yapısına iki opsiyonel blok ekleyebiliriz:

a. else Bloğu

  • Ne zaman çalışır: try bloğu hiçbir hata vermeden başarılı bir şekilde tamamlanırsa çalışır. Hata olursa else atlanır.

b. finally Bloğu

  • Ne zaman çalışır: try, except veya else bloklarında ne olursa olsun (hata olsun veya olmasın, hatta return veya break olsa bile) her zaman çalışır.

  • Kullanım Amacı: Dosyaları kapatmak, veritabanı bağlantılarını sonlandırmak gibi temizlik işlemlerini garanti altına almak için idealdir.

  • Örnek: Tüm Blokların Kullanımı

    dosya = None
    try:
        dosya = open("deneme.txt", "r")
        # Hata yoksa else çalışır
    except FileNotFoundError:
        print("Dosya bulunamadı!")
    else:
        print("Dosya başarıyla açıldı ve işlendi.")
    finally:
        if dosya:
            dosya.close() # Temizlik garantisi
        print("Hata yönetimi bloğu tamamlandı.")
    

Kendiniz Deneyebilirsiniz:


5. İstisnaları Kendimiz Oluşturalım: raise Anahtar Kelimesi

try...except bloğu, sistem veya kullanıcı tarafından oluşturulan hataları yakalamak için kullanılırken, raise anahtar kelimesi ise bir programcı olarak sizin, belirli bir koşul ihlal edildiğinde istisnayı kasten tetiklemenizi sağlar.

Söz Dizimi ve Kullanım Amacı

raise kullanmanın temel amacı, bir fonksiyonun veya kod bloğunun, kendisine sağlanan girdinin veya mevcut durumun beklentileri karşılamadığını belirtmektir.

# Genel Söz Dizimi
raise İstisnaAdı("Hata mesajı"

Örnek 1: Geçersiz Değer Hatası Yaratma

Bir fonksiyonda, girdinin geçerli bir aralıkta olup olmadığını kontrol edelim. Yaşın 0'dan küçük olmaması bir kuraldır.

def yas_kontrolu(yas):
    if yas < 0:
        # Kendi ValueError istisnamızı fırlatıyoruz
        raise ValueError("Yaş negatif bir değer olamaz!")    
    # Kural ihlal edilmezse normal işlem devam eder
    return f"Yaş {yas} olarak kabul edildi."
# Başarılı durum
print(yas_kontrolu(25))
# Hatalı durum (Program bu satırda durur ve except bloğuna girer)
try:
    yas_kontrolu(-5)
except ValueError as e:
    # Fırlattığımız hatayı yakalıyoruz
    print(f"Hata Yakalandı: {e}") 

# Çıktı:
# Yaş 25 olarak kabul edildi.
# Hata Yakalandı: Yaş negatif bir değer olamaz!

Örnek 2: Yakalanan Hatayı Tekrar Fırlatma

Bazen bir istisnayı yakalarız (örneğin kaydı loglamak için), ancak programın o istisna nedeniyle çalışmayı durdurması gerektiğini düşünürüz. except bloğunun içinde raise kullanmak, yakalanan istisnayı (veya yeni bir istisnayı) tekrar program akışına fırlatır.

try:
    sonuc = 10 / 0
except ZeroDivisionError:
    print("LOG: Sıfıra bölme denendi ve engellendi.")
    # Temizliği yaptıktan sonra programın durması için hatayı 
    #tekrar fırlat
    raise 
    
# Bu kod çalıştırıldığında, konsolda Traceback hatası tekrar 
#görünecektir.

Özetle

raise anahtar kelimesi, Python'da yalnızca hatalara tepki vermekle kalmayıp, aynı zamanda kendi kural ve kısıtlamalarımızı programatik olarak uygulayarak hataları aktif bir şekilde tetiklememizi sağlayan güçlü bir araçtır. Bu, kütüphane veya modül geliştirirken kodun tutarlılığını sağlamak için hayati öneme sahiptir.

Kendiniz Deneyebilirsiniz:


Hata Toleranslı Programlama

Hata ve istisna yönetimi, acemi ve profesyonel kod arasındaki en büyük farklardan biridir. try...except bloklarını kullanarak programlarınızı sadece "çalışır" değil, aynı zamanda kullanıcı hatalarına ve beklenmedik sistem durumlarına karşı "sağlam" ve "toleranslı" hale getirirsiniz.

🔥 Python Kariyerinizi Hemen Başlatın!

Hemen kursumuza kaydolun ve bu güçlü araçları kullanarak profesyonel Python geliştiricisi olma yolunda ilk adımı atın. Kursumuzdaki uygulamalı modüller, sizi sadece bir yazılımcı adayı değil, hazır bir profesyonel haline getirecek. Python Eğitimini Udemy platformunda bulabilirsiniz.

[ Python Eğitimi Sıfırdan İleri Seviye ]

Tıklayın ve Python Eğitimine Hemen Kaydolun!

Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Python print()

Yazılım Nedir?