Hata yönetimi, sağlam Python programlamanın kritik bir bileşenidir. Program yürütülmesi sırasında ortaya çıkabilecek hataları zarif bir şekilde yönetmenizi, çökmeleri önlemenizi ve kullanıcılara bilgilendirici geri bildirim sağlamanızı sağlar. Bu öğretici, Python’da hata yönetiminin temel kavramlarını ele almaktadır.
İçerik Tablosu
1. try…except
try...except
bloğu, hata yönetiminin temelini oluşturur. Bir hata oluşturabilecek kod, try
bloğunun içine yerleştirilir. Bir hata oluşursa, ilgili except
bloğu yürütülür.
try:
result = 10 / 0 # Bu bir ZeroDivisionError hatasına neden olacaktır
except ZeroDivisionError:
print("Hata: Sıfıra bölme!")
except TypeError:
print("Hata: Tip uyuşmazlığı")
except Exception as e: # Diğer tüm hataları yakalar
print(f"Beklenmedik bir hata oluştu: {e}")
else: # İsteğe bağlı else bloğu, hata oluşmazsa yürütülür
print(f"Sonuç: {result}")
finally: # İsteğe bağlı finally bloğu, her zaman yürütülür
print("Bu her zaman yürütülür.")
Bu örnek, bir ZeroDivisionError
hatasının nasıl ele alındığını göstermektedir. Birden fazla except
bloğu farklı hata türlerini ele alabilir. İsteğe bağlı else
bloğu, yalnızca try
bloğunda hata oluşmazsa yürütülür. İsteğe bağlı finally
bloğu ise her zaman yürütülür ve dosya kapatma gibi temizleme görevleri için idealdir.
2. raise Exception
raise
ifadesi, hataları veya istisnai durumları bildiren hataları açıkça oluşturmanıza olanak tanır.
def validate_age(age):
if age < 0:
raise ValueError("Yaş negatif olamaz")
elif age > 120:
raise ValueError("Yaş gerçekçi değil")
return age
try:
age = validate_age(-5)
print(f"Geçerli yaş: {age}")
except ValueError as e:
print(f"Hata: {e}")
Burada, validate_age
, yaş geçersizse bir ValueError
oluşturur. Herhangi bir yerleşik hatayı oluşturabilir veya özel olanları (Exception
‘dan türeyen sınıflar) oluşturabilirsiniz.
3. try…finally
finally
bloğu, içindeki kodun hatalardan bağımsız olarak her zaman yürütülmesini sağlar. Temizlik için çok önemlidir.
file = None
try:
file = open("my_file.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("Dosya bulunamadı!")
finally:
if file:
file.close()
print("Dosya kapandı.")
Bu, bir FileNotFoundError
oluşsa bile dosyanın kapatılmasını garanti eder ve kaynak sızıntılarını önler.
4. Yaygın Yerleşik Hatalar
Python, çok sayıda yerleşik hata sunar:
ZeroDivisionError
: Sıfıra bölme.TypeError
: Bir işlem için uygunsuz tip.ValueError
: Doğru tip, uygunsuz değer.FileNotFoundError
: Dosya bulunamadı.IndexError
: Aralık dışı indeks.KeyError
: Bir sözlükte anahtar bulunamadı.ImportError
: İçe aktarma hatası.NameError
: Ad bulunamadı.
5. Özel Hatalar Oluşturma
Daha özel hata yönetimi için, Exception
sınıfından türeterek özel hatalar oluşturun:
class InvalidInputError(Exception):
pass
def process_data(data):
if not data:
raise InvalidInputError("Veri boş olamaz")
# ...veri işlemenin geri kalanı...
try:
process_data("")
except InvalidInputError as e:
print(f"Özel Hata: {e}")
Bu, daha ayrıntılı hata yönetimi ve iyileştirilmiş kod okunabilirliği sağlar.
Etkin hata yönetimi, sağlam ve güvenilir Python programları yazmak için çok önemlidir. Potansiyel hataları öngörerek ve zarif bir şekilde ele alarak, daha dirençli ve kullanıcı dostu uygulamalar oluşturursunuz.