2011-02-18 2 views
0

필자는 파이썬에서 다른 반복자를 감싸는 반복자를 구현하고 있으며 반복자의 출력을 전달하기 전에 후 처리합니다.StopIteration 예외가 내 반복자를 통해 자동으로 위쪽으로 전파됩니까?

내부 반복자 완료
class MyIter(object): 
    """A filter for an iterator that returns strings.""" 
    def __init__(self, string_iterator): 
     self.inner_iterator = string_iterator 
    def __iter__(self): 
     return self 
    def next(self): 
     return "FILTERED BY MYITER: " + self.inner_iterator.next() 

, 그것은 대하여 StopIteration 예외를 발생한다 : 여기에 각 FILTERED BY MYITER: 문자열을 반환 앞에 추가 반복자 소요 사소한 예이다. 어떤 코드라도 반복자를 사용하여이 예외를 전파하기 위해 특별한 조치를 취해야합니까? 아니면 자동으로 발생하여 이터레이터가 올바르게 종료됩니다.

답변

1

특별한 작업을 수행 할 필요가 없습니다. StopIteration 예외가 자동으로 전파됩니다.

또한 - yield 키워드에 대해 읽고 싶을 수도 있습니다. 생성기/반복기 생성을 간소화합니다.

+0

우수, 방금 클래스의'__iter__' 메소드에서'yield'와 generator 표현식을 사용할 수 있다는 것을 배웠습니다. iterable 클래스에서 이들을 사용하는 방법을 잘 모르겠습니다. –

1

이 경우 StopIteration 예외가 전파됩니다.

1

시도해 본 결과 어떻게 되었습니까? :-)

그러나 예, StopIteration 예외는 특별하지 않으며 무언가가 그들을 잡을 때까지 전파됩니다. next() 메소드는 그것들을 잡아 내지 않으며 self.inner_iterator.next()는 반복 처리가 남아 있지 않을 때 StopIteration을 발생시킵니다.