У мене є певне розуміння списку в 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 можуть стати занадто безладним (перевірка декількох винятків, складніші комбінації (кілька логічних операторів, складне розуміння тощо)