from functools import wraps
from time import sleep
def retry(attempts=3, wait=2):
if attempts < 0 or attempts > 5:
retry_times = 3
else:
retry_times = attempts
if wait < 0 or wait > 5:
retry_wait = 2
else:
retry_wait = after
def retry_decorator(func):
@wraps(func)
def wrapped_function(*args, **kwargs):
while retry_times > 0:
try:
return func(*args, **kwargs)
except :
sleep(retry_wait)
retry_times -= 1
return wrapped_function
return retry_decorator
@retry(7, 8)
def test():
print 23333
raise Exception('Call me exception 2333.')
if __name__ == '__main__':
test()
output: UnboundLocalError: local variable 'retry_times' referenced before assignment
def retry(attempts=3, wait=2):
temp_dict = {
'retry_times': 3 if attempts < 0 or attempts > 5 else attempts,
'retry_wait': 2 if wait < 0 or wait > 5 else wait
}
def retry_decorate(fn):
@wraps(fn)
def wrapped_function(*args, **kwargs):
print id(temp_dict), temp_dict
while temp_dict.get('retry_times') > 0:
try:
return fn(*args, **kwargs)
except :
sleep(temp_dict.get('retry_wait'))
temp_dict['retry_times'] = temp_dict.get('retry_times') - 1
print id(temp_dict), temp_dict
print id(temp_dict), temp_dict
return wrapped_function
return retry_decorate
@retry(7, 8)
def test():
print 23333
raise Exception('Call me exception 2333.')
if __name__ == '__main__':
test()
4405472064 {'retry_wait': 2, 'retry_times': 3}
4405472064 {'retry_wait': 2, 'retry_times': 3}
23333
4405472064 {'retry_wait': 2, 'retry_times': 2}
23333
4405472064 {'retry_wait': 2, 'retry_times': 1}
23333
4405472064 {'retry_wait': 2, 'retry_times': 0}
>>> test.func_closure[1].cell_contents
{'retry_wait': 2, 'retry_times': 2}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有