İstisnalar, Python programlarınızdaki hataları ele almanın güçlü ve zarif bir yoludur. Özel istisnalar bu gücü yeni bir düzeye taşıyor.
Python'un yerleşik istisna sınıfları, kodunuzda ortaya çıkabilecek belirli hata durumlarını ele almaz. Bu gibi durumlarda, bu hataları etkili bir şekilde ele almak için özel istisnalar oluşturmanız gerekecektir.
Python'da özel istisnalar tanımlayabilir ve belirli hata durumları oluştuğunda bunları yükseltebilirsiniz. Özel istisnalarla belirli, bilgilendirici hataları yöneterek kodunuzun okunabilirliğini ve bakımını iyileştirebilirsiniz.
Neden Özel İstisnalara İhtiyacınız Var?
Bir uygulamanın geliştirilmesi sırasında koddaki değişiklikler, diğer paket veya kütüphanelerle entegrasyon, harici uygulamalarla etkileşimler nedeniyle çeşitli hata senaryoları ortaya çıkabilmektedir. Onlardan kurtulmak veya başarısızlığı incelikle ele almak için bu hataları ele almak çok önemlidir.
Python bir dizi ürün sunar yerleşik istisna gibi hataları kapsayan sınıflar Değer Hatası
, TipHatası, Dosya BulunamadıHatası, ve dahası. Bu yerleşik istisnalar amaçlarına iyi hizmet etse de, uygulamanızda oluşabilecek hataları yalnızca bazen doğru şekilde temsil edebilirler.Özel istisnalar oluşturarak bunları özel olarak uygulamanızın gereksinimlerine uyacak şekilde uyarlayabilir ve kodunuzu kullanan geliştiricilere bilgi sağlayabilirsiniz.
Özel İstisnalar Nasıl Tanımlanır
Özel istisnalar oluşturmak için, Python sınıfını tanımlayın miras alan İstisna sınıfı. İstisna class, istisnaları ele almak için ihtiyaç duyacağınız temel işlevleri sunar ve bunu, özel ihtiyaçlarınıza göre özellikler eklemek için özelleştirebilirsiniz.
Özel istisna sınıfları oluştururken, hata bilgilerini depolamak için gerekli öznitelikleri eklerken bunları basit tutun. İstisna işleyicileri daha sonra hataları uygun şekilde ele almak için bu niteliklere erişebilir.
İşte özel bir istisna sınıfı, Özel Hatam:
classMyCustomError(Exception):
def__init__(self, message=None):
self.message = message
super().__init__(message)
Bu sınıf, başlatma sırasında isteğe bağlı bir mesaj argümanını kabul eder. Şunu kullanır: Süper() tabanın yapıcısını çağırma yöntemi İstisna istisna yönetimi için gerekli olan sınıf.
Özel İstisnalar Nasıl Artırılır
Bir hatayı yükseltmek için şunu kullanın: artırmak anahtar sözcüğünü takiben özel istisna sınıfınızın bir örneği gelir ve ona argüman olarak bir hata mesajı iletilir:
ifTrue:
raise MyCustomError("A Custom Error Was Raised...")
Ayrıca herhangi bir argüman iletmeden hatayı yükseltebilirsiniz:
ifTrue:
raise MyCustomError # shorthand
Her iki format da özel hataların ortaya çıkması için uygundur.
Özel İstisnalar Nasıl Ele Alınır?
Özel istisnaların ele alınması aşağıdakiyle aynı yaklaşımı izler: yerleşik istisnaları işleme. Kullanmak denemek, hariç, Ve Sonunda özel istisnaları yakalamak ve uygun eylemi gerçekleştirmek için bloklar.
try:
print("Hello, You're learning how to MakeUseOf Custom Errors")
raise MyCustomError("Opps, Something Went Wrong...")
except MyCustomError as err:
print(f"Error: {err}")
finally:
print("Done Handling Custom Error")
Bu şekilde, ortaya çıkan her türlü özel istisnayı ele alabilirsiniz.
Bir işlemin yürütülmesi sırasında bir istisna meydana gelirse denemek blok, karşılık gelen hariç blok onu yakalayabilir ve halledebilir. Uygun olmadığı takdirde hariç istisnayı ele alacak herhangi bir blok Sonunda blok yürütülecek ve ardından istisna tekrar ortaya çıkacak. Kullanın Sonunda Bir istisna oluşsun ya da olmasın, öncelikle her durumda çalışması gereken temizleme görevlerini gerçekleştirmek için bloke edin.
try:
raise KeyboardInterrupt
except MyCustomError as err:
print(f"Error: {err}")
finally:
print("Did not Handle the KeyboardInterrupt Error. \
Can Only Handle MyCustomError")
Bu örnekte, bir Klavye Kesintisi istisna meydana gelir, ancak hariç yalnızca tutamaçları engelle Özel Hatam istisnalar. Bu durumda, Sonunda blok çalışır ve ardından işlenmeyen istisna yeniden ortaya çıkar.
Özel Hata Sınıflarını Devralma
Göre Nesneye Yönelik Programlama kavramı (OOP), normal sınıflar gibi özel istisna sınıflarından da miras alabilirsiniz. Özel bir istisna sınıfından miras alarak, bir istisnaya daha spesifik bağlam sağlayan hata sınıfları oluşturabilirsiniz. Bu yaklaşım, kodunuzdaki farklı düzeylerdeki hataları ele almanıza olanak tanır ve hataya neyin sebep olduğunun daha iyi anlaşılmasını sağlar.
Harici bir API ile etkileşime giren bir web uygulaması geliştirdiğinizi varsayalım. Bu API'nin farklı hata senaryoları olabilir. Bu hataları kodunuz boyunca tutarlı ve net bir şekilde ele almak isteyeceksiniz. Bunu başarmak için özel bir istisna sınıfı oluşturun, BaseAPIException:
classBaseAPIException(Exception):
Base class for API-related exceptions.
def__init__(self, message):
super().__init__(message)
self.message = message
Bu temel özel istisna sınıfına sahip olduğunuzda, ondan miras alan alt istisna sınıfları oluşturabilirsiniz:
classAPINotFoundError(BaseAPIException):
Raised when the requested resource is not found in the API.
passclassAPIAuthenticationError(BaseAPIException):
Raised when there's an issue with authentication to the API.
pass
classAPIRateLimitExceeded(BaseAPIException):
Raised when the rate limit for API requests is exceeded.
pass
Web uygulamanızda API'ye çağrı yaparken bu özel istisnaları gündeme getirin ve yakalayın. Kodunuzda uygun mantığı kullanarak bunları uygun şekilde kullanın.
defrequest_api():
try:
# Simulate an API error for demonstration purposes
raise APINotFoundError("Requested resource not found.")
except APINotFoundError as err:
# Log or handle the 'Not Found' error case
print(f"API Not Found Error: {err}")
except APIAuthenticationError:
# Take appropriate actions for authentication error
print(f"API Authentication Error: {err}")
except APIRateLimitExceeded:
# Handle the rate limit exceeded scenario
print(f"API Rate Limit Exceeded: {err}")
except BaseAPIException:
# Handle other unknown API exceptions
print(f"Unknown API Exception: {err}")
Son hariç cümlesi ana sınıfı kontrol eder ve API ile ilgili diğer hatalar için hepsini kapsayan bir işlev görür.
Özel istisna sınıflarını devraldığınızda API içindeki hataları etkili bir şekilde yönetebilirsiniz. Bu yaklaşım, hata işleme sürecinizi API'nin uygulama ayrıntılarından ayırmanıza olanak tanır. API geliştikçe veya yeni hatalarla karşılaştıkça özel istisnalar eklemeyi veya değişiklik yapmayı kolaylaştırır vakalar.
Özel İstisnaları Sarma
İstisnaları sarmak, bir istisnayı yakalamak, onu özel bir istisna içinde kapsüllemek ve ardından orijinal istisnayı nedeni olarak gösterirken bu özel istisnayı yükseltmek anlamına gelir. Bu teknik, hata mesajlarına bağlam sağlamaya yardımcı olur ve uygulama ayrıntılarının çağıran koddan gizlenmesini sağlar.
Web uygulamanızın bir API ile etkileşime girdiği senaryoyu düşünün. API bir yükseltirse Arama Hatası, onu yakalayabilirsin, sonra bir gelenek yükseltebilirsin APINotFoundError LookupError'a neden olarak başvuran istisna:
defrequest_api():
try:
# Simulate an API error for demonstration purposes
# Assuming the external API raised a LookupError
raise LookupError("Sorry, You Encountered A LookUpError !!!")
except LookupError as original_exception:
try:
# Wrap the original exception with a custom exception
raise APINotFoundError \
("Requested resource not found.") from original_exception
except APINotFoundError as wrapped_exception:
# Handle the wrapped exception here
print(f"Caught wrapped API exception: {wrapped_exception}")# or re-raise it if necessary
raise
try:
request_api()
except APINotFoundError as err:
print(f"Caught API exception: {err.__cause__}")
Kullanın itibaren ile madde artırmak özel istisnanız içindeki orijinal istisnaya referans veren ifade.
Özel istisna oluştuğunda, orijinal istisnayı bir __neden__ Özel istisna ile orijinal arasında bir bağlantı sağlayan özellik. Bu, bir istisnanın kökenini izlemenizi sağlar.
İstisnaları tamamlayarak, kodunuzun veya API'nizin dahili uygulama ayrıntılarını açıklamadan, daha anlamlı bir bağlam sağlayabilir ve kullanıcılara daha uygun hata mesajları gönderebilirsiniz. Ayrıca hata türlerini yapılandırılmış ve tek tip bir şekilde yönetmenize ve çözmenize olanak tanır.
Python'da Sınıf Davranışını Özelleştirme
Python'un sağladığı temel istisna sınıfını devralarak, kodunuzda belirli hatalar oluştuğunda oluşturabileceğiniz basit ve kullanışlı istisnalar oluşturabilirsiniz. Ayrıca, büyü veya dunder yöntemlerinin yardımıyla istisna sınıflarınız için özel davranışlar da uygulayabilirsiniz.