在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
函數會拋出一個新的異常,表示原始函數執行失敗。