2014-01-07 2 views
0

반복자의 루프 외부에있는 반복 중 하나에서 intetartor가 던진 예외를 캡처하고 싶습니다.for 문에서 예외를 캡처하십시오.

이 코드의 매우 단순화 된 버전입니다 :

class C(object): 
    def _iter(self): 
     for x in range(100): 
      yield x, x + 3 

    def doit(self): 
     for a, b in self._iter(): # <-- how can I capture an excepcion here? 
      print(a, b) 

내가 반복자 루프에서 예외를 캡처 할 수도 있지만 그러면 나는 어떻게보고의 doit 방법에 오류를 전달할 수 있습니다? 난 그냥 오류를 수집하고 다음 요소를 계속 doit 함수에있는 모든 방법을 전파 전파하게하고 싶습니다.

또한 모든 반복을 처리하고 오류를 수집하고 오류없이 모든 반복을 처리해야하므로 마지막에 모든 오류를보고 할 수 있습니다. 그렇게하면 단일 오류로 인해 다른 모든 요소가 처리되지 않습니다.

+0

왜 * 내 * 오류로'_iter()'인스턴스 메소드를 처리하지? – jonrsharpe

+0

@ F.C. 오류를 포착하고 처리 한 후 'for a, b in self._iter() :'루프를 계속 하시겠습니까? 나는 이것을 이렇게 해석하는 유일한 사람인가? – Nabla

+0

@jonrsharpe'_iter '안에 모든 오류를 수집 할 수 없기 때문에'_iter'가 뭔가를 반환해야하기 때문에'doit'이 사용할 수 있습니다. –

답변

0

try-catch 블록을 사용하십시오.

try: 
    for a, b in self._iter(): 
    print(a, b) 

except: 
    #throw your exception text here 
+0

이것은 OP가 요청한 내용이 아닙니다 : '어디에서 오류를 수집하고 다음 요소로 계속 진행할 수 있습니까?' – Nabla

0

이 작동합니다 :

class C(object): 
    def _iter(self): 
     try: 
      for x in range(100): 
      yield x, x + 3 
     except Exception as e: 
      raise e 

    def doit(self): 
     try: 
      for a, b in self._iter(): # <-- how can I capture an excepcion here? 
       print(a, b) 
     except Exception as e: 
      # do something with e 
     # rest of the python code here 
+0

예외가 발생하면 OP를 계속 진행하면서 생성기를 종료합니다. – Nabla

관련 문제