4

例外が 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 が生成されることはありません。なぜこのように振る舞うのですか?

4

2 に答える 2

8

ジェネレーターは、それ自体で例外を処理する必要があります。他の関数と同様に、未処理の例外が発生した場合は終了します。

于 2013-04-26T19:58:27.313 に答える