python - 如何捕获协程StopIteration异常?

标签 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')

我 try catch 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/

相关文章:

python - 在这种情况下如何使用tornado协程?

Python:将类对象转换为 JSON - 对象不可 JSON 序列化

python - 导入 win32com.client 错误

python - 将数据框中字符串列的唯一值转换为值为 0 或 1 的新多 header

c# - StartCoroutine/yield 返回模式在 Unity 中到底如何工作?

android - 在Activity/Fragment中,如何获取/等待ViewModel协程操作的返回值?

multithreading - 用户级线程和协程有什么区别?

python - 从 Python 和 AWS 说明书启动实例脚本不会创建任何实例

python多处理模块导致无限循环

node.js - MongoDB - 两个按顺序更新彼此重叠