Yakalayabilirsen Yakala: Python'da İstisna İşleme Rehberi
Akıllı istisna yönetimi ile Python'un tam potansiyelini ortaya çıkarın
Bir yazılım geliştiricisi olarak, istisnalarla uğraşmak genellikle gerekli bir kötülük olarak görülür. Yine de, Python'un istisna işleme sistemine hakim olmak sizi daha verimli ve etkili bir programcı yapabilir.
Bu blog gönderisinde, aşağıdakiler hakkında derinlemesine bir açıklama yapacağım:
- İstisna İşleme Nedir?
if
Tablolar ve İstisna İşleme Arasındaki Fark- Uygun Hata Yönetimi için Kullanım
else
ve Maddelerfinally
- Özel İstisnaları Tanımlama
- İstisna İşleme için En İyi Uygulamalar
istisna işleme, program yürütme sırasında meydana gelebilecek hataları veya istisnaları yakalamak ve işlemek için kod yazma işlemidir. Bu, geliştiricilerin tamamen çökmek yerine beklenmeyen olaylar veya hatalar karşısında bile çalışmaya devam eden sağlam kodlar yazmasına olanak tanır.
Bir istisna oluştuğunda, Python eşleşen bir istisna işleyici arar. İşleyici kodu, hatayı günlüğe kaydetmek, bir hata mesajı görüntülemek veya hatadan kurtulmaya çalışmak gibi uygun eylemleri yürütecek ve gerçekleştirecektir. Genel olarak istisna işleme, Python uygulamalarının daha güvenilir, bakım yapılabilir ve hata ayıklamanın daha kolay olmasına yardımcı olur.
if
Tablolar ve İstisna İşleme Arasındaki Fark
Python'da ifadeler ve istisna işleme arasındaki temel farklar, if
ilgili hedeflerinde ve kullanım senaryolarında yatmaktadır.
Açıklama if
, yapılandırılmış programlama için temel bir yapı taşı görevi görür. Bir koşulu değerlendirir ve koşulun doğru veya yanlış olmasına bağlı olarak farklı kod bloklarını yürütür. İşte bir örnek:
temperature = int(input("Please enter temperature in Fahrenheit: "))
if temperature > 100:
print("Hot weather alert! Temperature exceeded 100°F.")
elif temperature >= 70:
print("Warm day ahead, enjoy sunny skies.")
else:
print("Bundle up for chilly temperatures.")
İstisnalar, sorunlara işaret etmek ve kodda iyileştirme, hata giderme veya ek hata denetleme önlemleri gerektiren alanları belirtmek için kullanılır. Python'un hatalı durumları zarif bir şekilde ele almasına ve aniden sonlandırmak yerine betiği yürütmeye devam etmesine izin verirler.
Sıfıra bölmeyle ilgili olası hataları daha iyi yönetmek için istisna işlemeyi nasıl uygulayabileceğinize ilişkin aşağıdaki örneği göz önünde bulundurun:
# Define a function that tries to divide a number by zero
def divide(x, y):
result = x / y
return result
# Call the divide function with x=5 and y=0
result = divide(5, 0)
print(f"Result of dividing {x} by {y}: {result}")
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
ZeroDivisionError: division by zero attempted
try-except
Yukarıdaki istisnayı, "böl" işlevine yapılan çağrıyı şu şekilde bir blok içine sararak halledebiliriz :
# Define a function that tries to divide a number by zero
def divide(x, y):
result = x / y
return result
# Call the divide function with x=5 and y=0
try:
result = divide(5, 0)
print(f"Result of dividing {x} by {y}: {result}")
except ZeroDivisionError:
print("Cannot divide by zero.")
Cannot divide by zero.
Python'daki yerleşik İstisnalar hakkında daha fazla bilgi için [2] 'ye başvurabilirsiniz .
Uygun Hata Yönetimi için Else ve Nihayet Maddelerini Kullanma
Python'da istisnalarla çalışırken, bloklarınıza hem else
ve yan tümcelerini dahil etmeniz önerilir . Yan tümce, herhangi bir istisna ortaya çıkmazsa ne olacağını belirtmenize izin verirken, yan tümce, bir istisna oluşup oluşmadığına bakılmaksızın belirli temizleme işlemlerinin her zaman gerçekleştirilmesini sağlar [1] [2] .finally
try-except
else
finally
Örneğin, bir dosyadan veri okumak ve bu veri üzerinde bazı işlemler gerçekleştirmek istediğiniz bir senaryo düşünün. Dosyayı okurken bir istisna oluşursa, hatayı günlüğe kaydetmek ve daha fazla işlemeyi durdurmak isteyebilirsiniz, ancak yine de dosyayı düzgün bir şekilde kapatmak isteyebilirsiniz.
else
and yan tümcelerini kullanmak, finally
tam da bunu yapmanıza izin verir - herhangi bir istisna oluşmazsa verileri normal şekilde işleyin veya sonunda dosyayı kapatırken herhangi bir istisnayı uygun şekilde ele alın. Bu maddeler olmadan, kodunuz kaynak sızıntılarına veya eksik hata işlemeye karşı savunmasız olacaktır. Bu nedenle, sağlam ve güvenilir programlar oluşturmada önemli roller oynarlar.
try:
# Open the file in read mode
file = open("file.txt", "r")
print("Successful opened the file")
except FileNotFoundError:
# Handle missing files
print("File Not Found Error: No such file or directory")
exit()
except PermissionError:
# Handle permission issues
print("Permission Denied Error: Access is denied")
else:
# All good, do something with the file data
content = file.read().decode('utf-8')
processed_data = process_content(content)
# Cleanup after ourselves even if an exception occurred above
finally:
file.close()
Aksi takdirde, blok içinde herhangi bir istisna oluşmadığında try
, şubedeki dosya içeriklerini işlemeye devam ederiz else
. Son olarak, blok tarafından sağlanan temizleme işlemi, finally
daha önce bir istisna oluşturup oluşturmadığına bakılmaksızın dosyayı kapatır [1] .
Bunun gibi yapılandırılmış bir yaklaşımı benimseyerek, kodunuz düzenli kalır ve harici sistemlerle veya girdilerle etkileşimden doğabilecek olası hataları hesaba katarak takibi kolay olur.
Özel İstisnaları Tanımlama
Python'da, Exception
doğrudan Exception
.
Bunu yapmak için, bu temel istisnalardan birinden miras alan yeni bir sınıf oluşturmanız ve ihtiyaçlarınıza özel nitelikler eklemeniz gerekir. Daha sonra, yeni tanımlanmış istisna sınıfınızı, diğer herhangi bir yerleşik istisna sınıfını kullandığınız gibi, kodunuz boyunca kullanabilirsiniz.
Burada, adı verilen özel bir özel durum tanımlama örneği verilmiştir InvalidEmailAddress
:
class InvalidEmailAddress(ValueError):
def __init__(self, message):
super().__init__(message)
self.msgfmt = message
Geçersiz bir e-posta adresi biçimiyle karşılaştığınızda bu istisnayı oluşturabilirsiniz:
def send_email(address):
if isinstance(address, str) == False:
raise InvalidEmailAddress("Invalid email address")
# Send email
>>> send_email(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/path/to/project/main.py", line 8, in send_email
raise InvalidEmailAddress("Invalid email address")
InvalidEmailAddress: Invalid email address
Python'da hata işleme ile ilgili bazı en iyi uygulamalar şunlardır:
- Başarısızlık için tasarım : Olası başarısızlıkları göz önünde bulundurarak ve programınızı bunları zarif bir şekilde ele alacak şekilde tasarlayarak önceden planlayın. Bu, uç durumları tahmin etmek ve uygun hata işleyicileri uygulamak anlamına gelir.
- Açıklayıcı hata mesajları kullanın : Kullanıcıların neyin yanlış gittiğini ve nedenini anlamalarına yardımcı olan ayrıntılı hata mesajları veya günlükleri sağlayın. "Hata oluştu" veya "Kötü bir şey oldu" gibi genel hata mesajlarından kaçının. Bunun yerine, çözümler öneren veya belgelere bağlantılar veren samimi bir mesaj görüntüleyin. Ayrıntılı talimatlar sağlamakla kullanıcı arayüzünü gereksiz içerikle karıştırmaktan kaçınmak arasında bir denge kurduğunuzdan emin olun.
- Yan etkileri en aza indirin : Try-finally veya try-with-resource blokları aracılığıyla sorunlu kod bölümlerini izole ederek başarısız eylemlerin sonuçlarını en aza indirin. Temizleme görevlerinin başarı veya başarısızlık sonuçları ne olursa olsun her zaman yürütüldüğünden emin olun.
- Kapsamlı test edin : Kapsamlı test edin: Kapsamlı testler çalıştırarak istisna işleyicilerinizin çeşitli senaryolar altında doğru şekilde davrandığından emin olun.
- Düzenli olarak yeniden düzenleme yapın : Güvenilirliklerini ve performanslarını iyileştirmek için hataya açık kod segmentlerini yeniden düzenleyin. Kod tabanınızı modüler ve gevşek bir şekilde bağlı tutun, bağımsız bölümlerin başkalarını olumsuz etkilemeden bağımsız olarak gelişmesine izin verin.
- Önemli olayları günlüğe kaydedin: Uygulamanızdaki ilginç olayları bir dosyaya veya konsol çıktısına kaydederek takip edin. Bu, büyük miktarlarda yapılandırılmamış günlükleri gözden geçirmek zorunda kalmadan sorunları hızlı bir şekilde teşhis etmenize yardımcı olur.
Hata işleme kodu yazmak, geliştiricilerin daha güvenilir ve sağlam uygulamalar oluşturmasını sağladığından, özellikle Python ile çalışırken yazılım geliştirmenin ayrılmaz bir parçasıdır. Geliştiriciler, endüstri standartlarını ve en iyi uygulamaları takip ederek hata ayıklama süresini azaltabilir, kod kalitesini sağlayabilir ve daha iyi kullanıcı deneyimleri sağlayabilir.
Kaynaklar
[1]https://docs.python.org/3/tutorial/errors.html
[2]https://www.geeksforgeeks.org/python-exception-handling/