Eu tenho uma compreensão de lista em Python em que cada iteração pode lançar uma exceção.
Por exemplo , se eu tenho:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
Vou obter uma ZeroDivisionError
exceção no terceiro elemento.
Como posso lidar com essa exceção e continuar a execução da compreensão da lista?
A única maneira que consigo pensar é usar uma função auxiliar:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Mas isso parece um pouco complicado para mim.
Existe uma maneira melhor de fazer isso em Python?
Nota: Este é um exemplo simples (veja " por exemplo " acima) que inventei porque meu exemplo real requer algum contexto. Não estou interessado em evitar erros de divisão por zero, mas em lidar com exceções em uma compreensão de lista.
ndarray
com as configurações apropriadas em np.seterr
. Isso resultaria em 1/0 = nan
. Mas eu percebo que isso não generaliza para outras situações em que essa necessidade surge.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Mas ainda está em modo de rascunho. Meu pressentimento é que isso não será aceito. Expressões Imho podem ficar muito confusas (verificando múltiplas exceções, tendo combinações mais complexas (múltiplos operadores lógicos, compreensões complexas, etc.)