例外が Python ジェネレーター/イテレーターを途中で終了させないようにするにはどうすればよいですか?
たとえば、次のことを考慮してください。
#!/usr/bin/env python
def MyIter():
yield 1
yield 2
yield 3
raise Exception, 'blarg!'
yield 4 # this never happens
my_iter = MyIter()
while 1:
try:
value = my_iter.next()
print 'value:',value
except StopIteration:
break
except Exception, e:
print 'An error occurred: %s' % (e,)
私は出力を期待します:
value: 1
value: 2
value: 3
An error occurred: blarg!
value: 4
ただし、例外の後、イテレータは終了し、例外を処理してループを壊していないにもかかわらず、値 4 が生成されることはありません。なぜこのように振る舞うのですか?