- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
Merhaba! Programlamada iki ana sorun türü vardır:
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).
İ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.
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 |
| NameError | Tanımlanmamış bir değişkeni veya fonksiyonu çağırma. | print(x) (Eğer x tanımlanmadıysa) |
| TypeError | Yanlış veri tipinde işlem yapma. | '5' + 10 (String ile int toplama) |
| ValueError | Tip doğru ama değer uygun değil. | int("merhaba") (Metni sayıya çevirme girişimi) |
| ZeroDivisionError | Bir sayıyı sıfıra bölmeye çalışma. | 10 / 0 |
| IndexError | Bir listenin veya tuple'ın geçerli aralığının dışındaki bir indekse erişim. | liste[10] (Liste sadece 5 elemanlı ise) |
| KeyError | Bir sözlükte (dictionary) var olmayan bir anahtara erişme. | sozluk['yok'] |
try...except BloğuPython'da istisnaları yakalamak ve yönetmek için try...except blokları kullanılır.
# 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
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
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
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}")
else ve finallyHata yönetimini daha da hassas hale getirmek için try...except yapısına iki opsiyonel blok ekleyebiliriz:
else BloğuNe zaman çalışır: try bloğu hiçbir hata vermeden başarılı bir şekilde tamamlanırsa çalışır. Hata olursa else atlanır.
finally BloğuNe 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ı
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ı.")
raise Anahtar Kelimesitry...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.
raise kullanmanın temel amacı, bir fonksiyonun veya kod bloğunun, kendisine sağlanan girdinin veya mevcut durumun beklentileri karşılamadığını belirtmektir.
Bir fonksiyonda, girdinin geçerli bir aralıkta olup olmadığını kontrol edelim. Yaşın 0'dan küçük olmaması bir kuraldır.
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!
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.
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.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.
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.
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.
Yorumlar
Yorum Gönder