Genelde istisnaları dahili olarak işlemeyi tercih ederim (yani, çağrılan işlevin içinde deneyin / dışında, muhtemelen bir Yok döndürür) çünkü python dinamik olarak yazılır. Genel olarak, bunu şu ya da bu şekilde çağıran bir yargı olarak görüyorum, ancak dinamik olarak yazılmış bir dilde, istisnayı arayan kişiye iletmeme lehine ölçekleri değiştiren küçük faktörler vardır:
- Fonksiyonunuzu arayan kimse, fırlatılabilecek istisnalar konusunda bilgilendirilmez. Ne tür bir istisna peşinde koştuğunuzu (ve bloklar dışında genel olarak kaçınılması gereken) bilmek bir sanat formu haline gelir.
if val is None
biraz daha kolay except ComplicatedCustomExceptionThatHadToBeImportedFromSomeNameSpace
. Cidden, from django.core.exceptions import ObjectDoesNotExist
gerçekten yaygın bir kullanım durumunu ele almak için tüm django dosyalarımın en üstüne yazmayı hatırlamak zorunda kalmaktan nefret ediyorum . Statik olarak yazılmış bir dünyada, editörün sizin için yapmasına izin verin.
Dürüst olmak gerekirse, bu her zaman bir yargılama çağrısıdır ve tarif ettiğiniz durum, çağrılan işlevin yardımcı olamayacağı bir hata alması, anlamlı bir istisnayı yeniden gündeme getirmek için mükemmel bir nedendir. Tam olarak doğru fikre sahipsiniz, ancak bir istisna olmadıkça, yığın izlemede olduğundan daha anlamlı bilgi sağlayacaktır.
AttributeError: 'NoneType' object has no attribute 'foo'
ki, onda dokuzu, işlenmemiş bir Hiçbiri döndürürseniz arayanın göreceği şeydir, zahmet etmeyin.
(Tüm bunlar, python istisnalarının cause
, java'da olduğu gibi varsayılan olarak özniteliklere sahip olmasını dilememe neden oluyor, bu da istisnaları yeni istisnalara geçirmenize izin veriyor, böylece istediğiniz her şeyi yeniden atabilir ve sorunun orijinal kaynağını asla kaybetmezsiniz.)