在Python中,装饰器是一种修改或扩展函数行为的方法。要实现重试机制,你可以创建一个装饰器函数,该函数接受一个函数作为参数,并返回一个新的函数,这个新函数在执行原始函数时会尝试多次执行原始函数,直到达到最大尝试次数。
以下是一个简单的重试机制装饰器的实现:
import functools
import time
def retry(max_retries, delay=1):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
retries = 0
while retries < max_retries:
try:
return func(*args, **kwargs)
except Exception as e:
print(f"Error occurred: {e}")
retries += 1
time.sleep(delay)
raise Exception(f"Failed to execute {func.__name__} after {max_retries} retries")
return wrapper
return decorator
# 使用装饰器
@retry(max_retries=3, delay=2)
def example_function():
print("Executing example_function")
# 这里可以放置可能引发异常的代码
raise ValueError("An error occurred")
# 调用函数
try:
example_function()
except Exception as e:
print(e)
在这个例子中,retry
装饰器接受两个参数:max_retries
表示最大尝试次数,delay
表示每次尝试之间的延迟(以秒为单位)。decorator
函数是实际的装饰器,它接受一个函数func
作为参数,并返回一个新的函数wrapper
。wrapper
函数在执行func
时,会尝试多次执行func
,直到达到最大尝试次数。如果在尝试过程中发生异常,wrapper
函数会捕获异常并等待指定的延迟时间,然后再次尝试执行func
。如果所有尝试都失败了,wrapper
函数会抛出一个新的异常,表示原始函数执行失败。