python - 重试装饰器实现,重试未定义
问题描述
我已经实现了以下重试装饰器。
def retry(delay=10, retries=4):
def retry_decorator(f):
@wraps(f)
def f_retry(*args, **kwargs):
while retries > 1:
try:
return f(*args, **kwargs)
except Exception as e:
msg = "Exception: {}, Retrying in {} seconds...'.format(e, delay)"
print(msg)
time.sleep(delay)
retries -= 1
return f(*args, **kwargs)
return f_retry
return retry_decorator
我收到未定义重试的错误。但是,函数定义中提到了重试。我无法弄清楚这里出了什么问题。任何帮助将不胜感激。
解决方案
我通过在字典中收集变量重试和延迟然后在函数中使用它来使其工作。
def retry(delay=10, retries=4):
def retry_decorator(f):
@wraps(f)
def f_retry(*args, **kwargs):
opt_dict = {'retries': retries, 'delay': delay}
while opt_dict['retries'] > 1:
try:
return f(*args, **kwargs)
except Exception as e:
msg = "Exception: {}, Retrying in {} seconds...".format(e, delay)
print(msg)
time.sleep(opt_dict['delay'])
opt_dict['retries'] -= 1
return f(*args, **kwargs)
return f_retry
return retry_decorator
推荐阅读
- c++ - 初始化 std::unordered_map 类型的 std::shared_ptr 时编译错误
- asp.net-mvc - 我可以在 VS2019 的 BeforePublish 事件中更改 webconfig 文件中的 connectionString 文本吗?
- python-3.x - 'pygame.Surface' 对象没有属性 'draw'
- bash - 如何拆分 ls -l 的输出以正确的格式显示
- python - 神经网络正则化器 L1 和 L2
- python - 如果列表不存在,附加值或创建并插入?
- c# - Visual Studio 中的 Crystal Reports x86 + OLEDB x64
- karate - 空手道 - 用 if 条件替换值
- json - Powershell export-csv 显示 System.Object[],"System.Object[]"
- excel - 对象_worksheet的方法范围失败-但当我点击“运行子(F5)”时有效