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 |
---|---|
ValueError | Geçersiz bir değer verildiğinde oluşur. |
ZeroDivisionError | Bir sayının sıfıra bölünmesi durumunda oluşur. |
FileNotFoundError | Belirtilen dosya bulunamadığında oluşur. |
TypeError | Yanlış veri tipiyle işlem yapılmaya çalışıldığında oluşur. |
IndexError | Listede 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.