Mam trochę list składanych w Pythonie, w których każda iteracja może zgłosić wyjątek.
Na przykład , jeśli mam:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
W ZeroDivisionError
trzecim elemencie dostanę wyjątek.
Jak mogę obsłużyć ten wyjątek i kontynuować przetwarzanie listy?
Jedyny sposób, jaki przychodzi mi do głowy, to użycie funkcji pomocniczej:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Ale wydaje mi się to trochę kłopotliwe.
Czy jest lepszy sposób na zrobienie tego w Pythonie?
Uwaga: to jest prosty przykład (patrz „ na przykład ” powyżej), który wymyśliłem, ponieważ mój prawdziwy przykład wymaga kontekstu. Nie interesuje mnie unikanie błędów dzielenia przez zero, ale obsługa wyjątków przy przetwarzaniu list.
ndarray
z odpowiednimi ustawieniami w np.seterr
. To by skutkowało 1/0 = nan
. Ale zdaję sobie sprawę, że nie dotyczy to innych sytuacji, w których pojawia się taka potrzeba.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Ale nadal jest w trybie roboczym. Mam przeczucie, że nie zostanie to zaakceptowane. Wyrażenia Imho mogą być zbyt nieporządne (sprawdzanie wielu wyjątków, bardziej złożone kombinacje (wiele operatorów logicznych, złożone