私はこのような4リスト・イテレータをループを書いていますマップを呼び出すとStopIteration前に提起:とValueError(次、イテラブル)
it0 = iter(['foo','bar'])
it1 = iter(['bar','foo'])
it2 = iter(['foo','foo'])
it3 = iter(['bar','bar'])
try:
a, b, c, d = map(next, (it0, it1, it2, it3))
while True:
#some operations that can raise ValueError
if a+b+c+d == 'foobar'*2:
a, b, c, d = map(next, (it0, it1, it2, it3))
elif a+b == 'foobar':
c, d = map(next,(it2, it3))
else:
a, b = map(next,(it0, it1))
except StopIteration:
pass
しかし、私はのpython3でこのコードを実行すると、私は前に上げValueError: not enough values to unpack (expected 2, got 0)
を取得予想StopIteration
。
except
ステートメントでValueError
をキャッチしたくありません。なぜなら、whileループのいくつかの操作は、プログラムを停止する必要があるValueError
になる可能性があるからです。
next
は、どのように割り当て前に例外を発生させませんか?
Python2.7では、まずStopIteration
が呼び出されます。
あなたはおそらくエラーを修正する必要がありますが、FYIあなたはすべてキャッチすることなく、例外の複数のタイプをキャッチすることができます: 'を呼び出すとStopIteration、ValueErrorを除きました: do_something() ' – jDo
クールクール..あなたの質問は、あなたがこれを知らなかったと私に信じさせました。あなたの唯一の選択肢は 'StopIteration'か' ValueError'のいずれかを捕捉するように書かれています。両方ではありません。とにかく、Pieters氏が実際の問題を以下のように解決したと思います。 – jDo
@jDo、私はちょうどループを停止するためにStopIterationをキャッチしたいですが、私はValueErrorがある場合、プログラムを停止したいです。 ValueErrorがStopIterationを意味する可能性がある場合は、混乱します。あなたは問題が解決したと言った。 –