Python'da her yinelemenin bir istisna oluşturabileceği bir liste anlayışım var.
Örneğin , eğer varsa:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
ZeroDivisionError
3. elementte bir istisna elde edeceğim .
Bu istisnayı nasıl ele alabilirim ve liste kavrayışını yürütmeye nasıl devam edebilirim?
Aklıma gelen tek yol, yardımcı bir işlev kullanmaktır:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Ama bu bana biraz hantal görünüyor.
Bunu Python'da yapmanın daha iyi bir yolu var mı?
Not: Bu, benim yaptığım basit bir örnektir ( yukarıdaki " örneğin " kısmına bakın) çünkü gerçek örneğim biraz bağlam gerektiriyor. Sıfır hataya bölmekten kaçınmakla ilgilenmiyorum, ancak bir liste anlayışında istisnaları ele almakla ilgileniyorum.
ndarray
içinde uygun ayarlara sahip bir numpy kullanabileceğinizi unutmayın np.seterr
. Bu sonuçlanır 1/0 = nan
. Ancak bunun, bu ihtiyacın ortaya çıktığı diğer durumlara genellemediğinin farkındayım.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Ama hala taslak modunda. İçimden gelen his, kabul edilmeyeceği yönünde. Imho ifadeler çok dağınık (daha karmaşık kombinasyonları (çoklu mantıksal operatörler, karmaşık comprehensions, vs) sahip çoklu istisnaları kontrol alabilirsiniz