import time import functools def retry(max_attempts=3, delay=2, exceptions=(Exception,)): def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): for attempt in range(1, max_attempts + 1): try: return func(*args, **kwargs) except exceptions as e: if attempt == max_attempts: raise print(f"Attempt {attempt} failed: {e}. Retrying in {delay}s...") time.sleep(delay) return wrapper return decorator