变量修改会触发错误

时间:2015-09-07 15:53:12

标签: python

某个功能operation,外部服务和有时失败。我想在放弃之前尝试N次。出于这个原因,我将重试代码编写为装饰器,现在我想对其进行单元测试。

我为可能出错的操作创建了一个简单的模型函数:函数失败,N-1次异常,并且N次成功。

这是代码:

def mock(retry):
    def repl(*xs, **ks):
        if retry == 0:
            return 1
        retry -= 1
        raise error('boom')
    return repl

这就是我想要应用它的方式:

somemodule.library.operation = mock(N - 1)
somemodule.run() # calls somemodule.library.operation

出乎意料的是,通过运行mock(N -1)()我在if retry == 0行上收到以下错误:

UnboundLocalError: local variable 'retry' referenced before assignment

在试图理解原因后,我发现错误会在我摆脱retry -= 1行后立即消失。

我对这个事实感到有点困惑,因为在我看来,retry变量应该完全属于mock范围,而不仅仅是以只读方式访问它。如果有的话,我应该总是得到错误,不仅仅是我修改它。

为什么这是一个问题?您认为正确的做法是什么?

注意:

  • 我可以在Python2和Python3
  • 中看到这种行为
  • 我还尝试在global retry条件
  • 之前定义if retry == 0

0 个答案:

没有答案