在Python中,裝飾器是一種修改或擴展函數(shù)行為的方法。要實現(xiàn)重試機制,你可以創(chuàng)建一個裝飾器函數(shù),該函數(shù)接受一個函數(shù)作為參數(shù),并返回一個新的函數(shù),這個新函數(shù)在執(zhí)行原始函數(shù)時會嘗試多次執(zhí)行原始函數(shù),直到達到最大嘗試次數(shù)。
以下是一個簡單的重試機制裝飾器的實現(xiàn):
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")
# 這里可以放置可能引發(fā)異常的代碼
raise ValueError("An error occurred")
# 調(diào)用函數(shù)
try:
example_function()
except Exception as e:
print(e)
在這個例子中,retry
裝飾器接受兩個參數(shù):max_retries
表示最大嘗試次數(shù),delay
表示每次嘗試之間的延遲(以秒為單位)。decorator
函數(shù)是實際的裝飾器,它接受一個函數(shù)func
作為參數(shù),并返回一個新的函數(shù)wrapper
。wrapper
函數(shù)在執(zhí)行func
時,會嘗試多次執(zhí)行func
,直到達到最大嘗試次數(shù)。如果在嘗試過程中發(fā)生異常,wrapper
函數(shù)會捕獲異常并等待指定的延遲時間,然后再次嘗試執(zhí)行func
。如果所有嘗試都失敗了,wrapper
函數(shù)會拋出一個新的異常,表示原始函數(shù)執(zhí)行失敗。