我使用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

关于python - 如何捕获协程StopIteration异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41710590/

10-10 19:52