防止异常终止Python i

2024-06-28 19:47:34 发布

您现在位置:Python中文网/ 问答频道 /正文

如何防止异常过早终止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,即使我已经处理了异常并且没有中断我的循环。为什么会这样?你知道吗


Tags: anbinvaluemyusrexceptionerror因素
2条回答

生成器需要处理自身内部的异常;如果它引发未处理的异常,它将终止,就像任何其他函数一样。你知道吗

您需要处理生成器中可能发生的任何异常:

def MyIter():
    yield 1
    yield 2
    yield 3
    try:
       raise Exception, 'blarg!'
    except Exception:
       pass
    yield 4 # this will happen

相关问题 更多 >