如何捕获协程StopIteration异常?

时间:2017-01-18 02:51:06

标签: python coroutine

我使用的是python2.7。

def printtext():
    try:
        line = yield
        print line
    except StopIteration:
        pass

if __name__ == '__main__':
    p = printtext()
    p.send(None)
    p.send('Hello, World')

我尝试捕获StopIteration异常但它仍然被提升而没有被捕获。

你能不能给我一些提示,为什么StopIteration例外在这种情况下会被转义?

1 个答案:

答案 0 :(得分:1)

StopIteration被提出时,你会产生误解。生成器函数退出时会引发StopIteration,而不是yield表达式。因此,解决这个问题的唯一方法是在函数之外进行...

def printtext():
    line = yield
    print line

if __name__ == '__main__':
    p = printtext()
    p.send(None)
    try:
        p.send('Hello, World')
    except StopIteration:
        pass