在项目中遇到这样一个问题:
定义了一个修饰器接收可变参数max_retries,实现http请求retry。
def http_retry(max_retries=3):
retries = max_retries
def deco_retry(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
resp = func(*args, **kwargs)
if resp.status_code == 200:
return resp
else:
# nonlocal retries
retries = retries - 1
print(f"http request {str(args)} failed with status_code: {resp.status_code}, retry...")
while retries > 0:
resp = func(*args, **kwargs)
if resp.status_code == 200:
return resp
else:
retries = retries - 1
print(f"http request {str(args)} failed with status_code: {resp.status_code}, retry...")