捕获for语句中的异常

时间:2014-01-07 17:10:54

标签: python exception iterator

我想捕获一个intetartor在迭代器循环之外的迭代中抛出的异常。

这是代码的非常简化版本:

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函数,在那里我可以收集错误并继续下一个元素。

此外,我需要处理所有迭代,收集错误并处理所有迭代而不需要错误,以便我可以在最后报告所有错误。这样,单个错误不会阻止所有其他元素的处理。

2 个答案:

答案 0 :(得分:0)

使用try-catch块。

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

except:
  #throw your exception text here

答案 1 :(得分: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