【问题标题】:How to catch coroutine StopIteration exception?如何捕获协程 StopIteration 异常?
【发布时间】:2017-01-18 02:51:06
【问题描述】:

我用的是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 异常在这种情况下会逃脱?

【问题讨论】:

  • 它是由send 提出的,而不是yield
  • 谢谢。我想我明白了。 @瑞安

标签: python coroutine


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-05-04
    • 2023-04-09
    • 2021-01-25
    • 2018-05-12
    • 2013-06-07
    • 1970-01-01
    • 2018-10-14
    • 2018-01-01
    • 2011-09-26
    相关资源
    最近更新 更多