Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何捕获协同程序StopIteration异常?_Python_Coroutine - Fatal编程技术网

Python 如何捕获协同程序StopIteration异常?

Python 如何捕获协同程序StopIteration异常?,python,coroutine,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异常,但仍会在未被捕获的情况下引发异常 请

我使用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
时,您误解了<代码>停止迭代在生成器函数退出时发出,而不是在
产生
表达式期间发出。因此,捕获此信息的唯一方法是在函数之外执行此操作

def printtext():
    line = yield
    print line

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

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