私はいくつかのリストの理解を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
で適切な設定をしたnumpy を使用できることに注意してくださいnp.seterr
。その結果、になり1/0 = nan
ます。しかし、それがこのニーズが発生する他の状況に一般化されないことを私は理解しています。
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
。しかし、それはまだドラフトモードです。私の直感はそれが受け入れられないだろうということです。Imho式は面倒になりすぎる可能性があります(複数の例外をチェックしたり、より複雑な組み合わせ(複数の論理演算子、複雑な内包表記など)を