在封装生成器的装饰器中捕获异常

时间:2016-03-03 14:07:42

标签: python exception-handling decorator yield

我有一个装饰器包裹一个从鼻子测试盒内部产生的发生器。对于每次迭代,如果发生异常,我都希望捕获并运行特定的拆解,但它似乎没有按预期运行。

def print_log(test_case):
    @wraps(test_case)
    def run_test(self):
        try:
            for _ in test_case(self): pass
        except:
            Test_Loop.failure_teardown(self)
            raise
   return run_test

我做错了吗?

1 个答案:

答案 0 :(得分:0)

我不确定意外的行为是什么,但也许它正在发生,因为你没有单独尝试每个循环迭代。

也许这会有用吗?

def print_log(test_case):
    @wraps(test_case)
    def run_test(self):
        from six.moves import next
        test_iter = iter(test_case(self))
        while True:
            try:
                next(test_iter)
            except StopIteration: 
                break
            except Exception:
                Test_Loop.failure_teardown(self)
                raise
   return run_test