2017-01-18 7 views
0

저는 python2.7을 사용합니다.coroutine StopIteration 예외를 잡는 방법?

def printtext(): 
    try: 
     line = yield 
     print line 
    except StopIteration: 
     pass 

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

나는 StopIteration 예외를 잡으려고 시도하지만 아직 잡히지 않고 제기됩니다.

StopIteration 예외가이 경우에 이스케이프 처리 된 이유를 알려주세요.

+0

'보내기'가 아니라 'yield'로 발생합니다. – Ryan

+0

감사합니다. 나는 그 점을 알고 있다고 생각한다. @ 라이언 – shoujs

답변

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