Check

Декоратор ретраев

Python Middle Сбер 01.01.2025
Реализуйте декоратор `retry(times: int)`, который повторяет вызов функции при возникновении исключения до `times` раз. Если все попытки завершились исключением — последнее исключение пробрасывается наружу. **Пример:** ```python @retry(3) def may_fail(): ... ```
Ответы
Решение 1
```python import functools from typing import Callable, TypeVar T = TypeVar("T") def retry(times: int) -> Callable[[Callable[..., T]], Callable[..., T]]: def decorator(func: Callable[..., T]) -> Callable[..., T]: @functools.wraps(func) def wrapper(*args, **kwargs) -> T: last_exc: Exception | None = None for _ in range(times): try: return func(*args, **kwargs) except Exception as exc: last_exc = exc assert last_exc is not None raise last_exc return wrapper return decorator ```