Ho un elenco di comprensione in Python in cui ogni iterazione può generare un'eccezione.
Ad esempio , se ho:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
Otterrò ZeroDivisionError
un'eccezione nel 3 ° elemento.
Come posso gestire questa eccezione e continuare l'esecuzione della comprensione della lista?
L'unico modo a cui posso pensare è usare una funzione di supporto:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Ma questo mi sembra un po 'macchinoso.
C'è un modo migliore per farlo in Python?
Nota: questo è un semplice esempio (vedi " per esempio " sopra) che ho escogitato perché il mio esempio reale richiede un contesto. Non mi interessa evitare errori di divisione per zero ma gestire le eccezioni in una lista di comprensione.
ndarray
con le impostazioni appropriate in np.seterr
. Ciò risulterebbe 1/0 = nan
. Ma mi rendo conto che non si generalizza ad altre situazioni in cui sorge questa esigenza.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Ma è ancora in modalità bozza. La mia sensazione istintiva è che non verrà accettato. Le espressioni Imho possono diventare troppo disordinate (controllare più eccezioni, avere combinazioni più complesse (più operatori logici, comprensioni complesse, ecc.)