У меня есть понимание списка в Python, в котором каждая итерация может вызывать исключение.
Например , если у меня есть:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
Я получу ZeroDivisionError
исключение в 3-м элементе.
Как я могу обработать это исключение и продолжить выполнение понимания списка?
Единственный способ, который я могу придумать, - это использовать вспомогательную функцию:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Но мне это кажется немного громоздким.
Есть ли лучший способ сделать это в Python?
Примечание. Это простой пример (см. « Например » выше), который я придумал, потому что мой реальный пример требует некоторого контекста. Я не заинтересован в том, чтобы избежать ошибок деления на ноль, а в обработке исключений в понимании списка.
ndarray
с соответствующими настройками в np.seterr
. Это приведет к 1/0 = nan
. Но я понимаю, что это не распространяется на другие ситуации, в которых возникает такая необходимость.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Но он все еще в черновом режиме. Я чувствую, что это не будет принято. Выражения Imho могут стать слишком запутанными (проверка нескольких исключений, наличие более сложных комбинаций (несколько логических операторов, сложные понимания и т. Д.)