参考代码
#!/usr/local/python3/bin/python3
# -*- coding: utf-8 -*
import time
import random
from functools import wraps
def retry_on_failure(max_retries=3, delay=1, allowed_exceptions=()):
"""
函数调用出错重试装饰器
参数:
max_retries (int): 最大重试次数,默认为3
delay (int): 每次重试之间的延迟时间(秒),默认为1
allowed_exceptions (tuple): 允许重试的异常类型,默认为空(所有异常都重试)
"""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
retries = 0
last_exception = None
while retries < max_retries:
try:
return func(*args, **kwargs)
except allowed_exceptions if allowed_exceptions else Exception as e:
last_exception = e
retries += 1
if retries < max_retries:
print(f"调用 {func.__name__} 失败,第 {retries} 次重试... (错误: {str(e)})")
time.sleep(delay)
print(f"函数 {func.__name__} 在 {max_retries} 次尝试后仍然失败")
raise last_exception
return wrapper
return decorator
# 示例使用
@retry_on_failure(max_retries=3, delay=1, allowed_exceptions=(ValueError, RuntimeError))
def unreliable_function(x):
"""一个可能失败的示例函数"""
if random.random() < 0.7: # 70%的概率失败
raise ValueError("随机失败: 数值错误")
return x * 2
# 测试代码
if __name__ == "__main__":
try:
result = unreliable_function(5)
print(f"调用成功,结果: {result}")
except Exception as e:
print(f"最终失败: {str(e)}") 网友回复
如何将linux服务器的文件目录映射到windows电脑磁盘?
Docling 与 MarkItDown 两个库有啥不同?
豆包收费后国产其他ai软件也会跟进收费吗?
JPEG 与 HEIF图片格式区别?
centos7版本太旧无法安装python3.11,如何在docker中运行python3.11?
python如何做个RPA按键精灵的程序?
写一个windows的cmd的python代码如何在命令行中捕获获取复制粘贴的图片?
如何将别人爆款的抖音短视频短剧文案提取为seedance2的提示词?
阿里云域名dns云解析10万次日限额如何应对?
windows电脑如何提交上架ipa苹果应用?


