如何捕获协程停止迭代异常



我使用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例外逃脱了吗?

你对

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

最新更新