溫馨提示×

Python裝飾器如何實現(xiàn)重試機制

小樊
81
2024-11-02 05:25:16
欄目: 編程語言

在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í)行失敗。

0