You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
767 B
23 lines
767 B
# -*- coding: utf-8 -*-
|
|
"""工具函数"""
|
|
|
|
import time
|
|
from typing import Callable, Any
|
|
|
|
|
|
def retry_on_exception(max_retries: int = 3, delay: float = 5.0) -> Callable:
|
|
"""异常重试装饰器"""
|
|
def decorator(func: Callable) -> Callable:
|
|
def wrapper(*args, **kwargs) -> Any:
|
|
for attempt in range(max_retries):
|
|
try:
|
|
return func(*args, **kwargs)
|
|
except Exception as e:
|
|
if attempt == max_retries - 1:
|
|
raise e
|
|
print(f"尝试 {attempt + 1}/{max_retries} 失败: {e}")
|
|
print(f"{delay}秒后重试...")
|
|
time.sleep(delay)
|
|
return None
|
|
return wrapper
|
|
return decorator |