Yazılım
Python Dersleri 8-Hata Yönetimi ve İstisnalar
09/07/2023 01:54:22
Bu dersimizde Python programlama dilinde hata yönetimi ve istisnaları öğreneceğiz. Hata yönetimi, bir programın çalışması sırasında ortaya çıkan hataları kontrol etmek ve bu hatalara uygun bir şekilde tepki vermek demektir. İşte try-except blokları, hata türleri ve istisna hiyerarşisi, finally ve else ifadeleri, hata yakalama ve hata iletimi gibi konuları ele alacağız. Ayrıca bir örnek uygulama olan dosya okuma hatası yakalama örneğini yaparak bu kavramları pratiğe dökeceğiz.
try-except Blokları:
Python'da hata yönetimi için try-except bloklarını kullanırız. try bloğu içinde potansiyel olarak hata verebilecek kodları yazarken, except bloğu içinde hata durumunda yapılacak işlemleri belirtiriz. İşte bir örnek:
try:
sayi = int(input("Bir sayı girin: "))
sonuc = 10 / sayi
print("Sonuç:", sonuc)
except ZeroDivisionError:
print("Hata: Sıfıra bölme hatası!")
except ValueError:
print("Hata: Geçersiz sayı girişi!")
Yukarıdaki örnekte, try bloğu içinde kullanıcıdan bir sayı alırız. Ardından bu sayıyı kullanarak bir işlem yaparız. Eğer kullanıcı sıfır girerse ZeroDivisionError hatası alırız ve except ZeroDivisionError bloğu çalışır. Eğer kullanıcı geçerli bir sayı dışında bir değer girerse ValueError hatası alırız ve except ValueError bloğu çalışır. Hata durumunda bu blokların içinde belirtilen mesajlar ekrana yazdırılır.
Hata Türleri ve İstisna Hiyerarşisi:
Python'da birçok farklı hata türü vardır ve bu hatalar bir istisna hiyerarşisi içinde gruplanır. Bir hata türünden türeyen hatalar, o hata türünün istisnası olarak kabul edilir. Örneğin, ZeroDivisionError hatası, ArithmeticError hatasından türetilmiştir. İşte bir örnek:
try:
liste = [1, 2, 3]
print(liste[4])
except IndexError:
print("Hata: İndeks hatası!")
except ArithmeticError:
print("Hata: Aritmetik hatası!")
Yukarıdaki örnekte, IndexError hatası, IndexError sınıfından türetilmiştir ve except IndexError bloğu bu hatayı yakalar. Aynı şekilde, ArithmeticError hatası da ArithmeticError sınıfından türetilmiştir ve except ArithmeticError bloğu bu hatayı yakalar. İstisnaların hiyerarşik yapısı, hataları daha spesifik şekilde yakalamamızı sağlar.
finally ve else İfadeleri:
try-except bloklarının yanı sıra Python'da finally ve else ifadeleri de kullanabiliriz. finally bloğu, try bloğundaki kodların tamamlanmasından bağımsız olarak her zaman çalışır. else bloğu ise try bloğunda hata olmadığında çalışır. İşte bir örnek:
try:
dosya = open("metin.txt", "r")
icerik = dosya.read()
except FileNotFoundError:
print("Hata: Dosya bulunamadı!")
else:
print("Dosya içeriği:")
print(icerik)
finally:
dosya.close()
Yukarıdaki örnekte, try bloğunda "metin.txt" adlı bir dosya açılır ve içeriği icerik adlı bir değişkene atılır. Eğer dosya bulunamazsa FileNotFoundError hatası alırız ve except FileNotFoundError bloğu çalışır. Eğer dosya bulunursa else bloğu çalışır ve içeriği ekrana yazdırır. finally bloğu ise dosyayı her durumda kapatır, bu nedenle try veya except bloklarında herhangi bir hata olsa bile dosya kapatılır.
Hata Yakalama ve Hata İletimi:
Bazen bir hata yakaladıktan sonra onu başkabir yerde işlemek veya başka bir yere iletmek isteyebiliriz. Bunun için raise ifadesini kullanabiliriz. İşte bir örnek:
def bolme(a, b):
try:
if b == 0:
raise ZeroDivisionError("Bölme hatası: Sıfıra bölme!")
else:
return a / b
except ZeroDivisionError as hata:
print(hata)
sonuc = bolme(10, 0)
Yukarıdaki örnekte, bolme() adlı bir fonksiyon tanımladık. Fonksiyon, iki parametre alır ve bu parametreleri böler. Eğer bölen sıfır ise ZeroDivisionError hatasını kendimiz oluşturarak (raise) fırlatırız. Aksi takdirde sonucu döndürür.
bolme() fonksiyonunu çağırdığımızda, bölen sıfır olduğu için ZeroDivisionError hatası oluşur. Bu hatayı except ZeroDivisionError bloğu yakalar ve hatayı ekrana yazdırır.
Örnek Uygulama: Dosya Okuma Hatası Yakalama:
Şimdi, Python'da bir dosyayı okurken oluşabilecek hataları yakalayan bir örnek yapalım. Kullanıcıdan bir dosya adı alacak ve bu dosyayı açarak içeriğini ekrana yazdıracak bir fonksiyon oluşturacağız. Eğer dosya bulunamaz veya okuma hatası oluşursa bunları yakalayarak kullanıcıya bilgi vereceğiz. İşte örnek kod:
def dosya_oku(dosya_adi):
try:
with open(dosya_adi, "r") as dosya:
icerik = dosya.read()
print("Dosya içeriği:")
print(icerik)
except FileNotFoundError:
print("Hata: Dosya bulunamadı!")
except IOError:
print("Hata: Dosya okuma hatası!")
# Kullanıcıdan dosya adını alma
dosya_adi = input("Bir dosya adı girin: ")
# Dosyayı okuma
dosya_oku(dosya_adi)
Yukarıdaki örnekte, dosya_oku() adlı bir fonksiyon tanımladık. Bu fonksiyon, aldığı dosya_adi parametresiyle belirtilen dosyayı açar ve dosyanın içeriğini okur. Eğer dosya bulunamazsa FileNotFoundError hatası, okuma hatası oluşursa IOError hatası alırız ve ilgili hata mesajlarını ekrana yazdırırız.
Kullanıcıdan bir dosya adı alarak dosya_adi değişkenine atarız. Daha sonra dosya_oku() fonksiyonunu çağırarak dosyayı okuruz.
Bu şekilde bir dosya okuma hatası yakalama örneğini Python'da gerçekleştirmiş oluyoruz.
Bu dersimizde Python programlama dilinde hata yönetimi ve istisnaları öğrendik. Hata yakalama, hata türleri ve istisna hiyerarşisi, finally ve else ifadeleri gibi konuları ele aldık. Hata yönetimi sayesinde programlarımızda ortaya çıkabilecek hataları kontrol edebilir ve bu hatalara uygun bir şekilde tepki verebiliriz.
SİZ DE SİTEMİZDE YAZAR OLARAK YAZILARINIZI PAYLAŞABİLİRSİNİZ


* İlk yorum yapan sen ol