python装饰器-自动重试

带参数的自动重试装饰器

在调用不稳定的外部 API 时,自动重试非常有用。
下面定义了一个带重试次数参数到装饰器,在调用外部api时如果失败会重试, 最大重试次数3次

import random
import functools

def retry(max_attempts=3):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            for i in range(1, max_attempts + 1):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    print(f"第 {i} 次调用失败: {e},准备重试...")
            raise Exception("达到最大重试次数,依然失败")
        return wrapper
    return decorator

@retry(max_attempts=3)
def unstable_api():
    if random.random() < 0.7: # 模拟 70% 的失败率
        raise ConnectionError("网络波动")
    return "API 调用成功!"

print(unstable_api())
posted @ 2026-05-09 10:04  干炸小黄鱼  阅读(8)  评论(0)    收藏  举报