我正在开发一个装饰器,它将重试运行一个函数最多 N 次,如下所示:
def retry(exceptions, truncate=5, delay=0.25):
"""Retry the decorated function using an exponential backoff strategy.
If the function does not complete successfully a TimeoutException is
raised."""
def wrapper(func):
@wraps(func)
def wrapped(*args, **kwargs):
tries = 0
while tries < truncate:
try:
return func(*args, **kwargs)
except exceptions, e:
print "%s, Retrying in %d seconds..." % (str(e), delay)
time.sleep(delay)
>> delay += delay
tries += 1
else:
raise TimeoutException()
return wrapped
return wrapper
对我来说,代码看起来很合理,但在突出显示的 pyflakes 抱怨的行上,报告:
赋值前引用的 W804 局部变量“延迟”(在第 x 行的封闭范围中定义)
这对我来说完全没有意义。delay
已经被分配了一个值,我想我应该可以随意引用它。有人可以解释错误是什么,如果合理,我该如何解决?