Код Senior Функции и области видимости обновлено
Повтор вызова с ограничением попыток
Условие
Напишите retry(fn, attempts, retry_on): вызывает fn() до attempts раз; если fn бросает исключение, имя класса которого есть в retry_on, пробует снова; другие исключения пробрасывает сразу; если попытки кончились, пробрасывает последнее исключение. Проверка run(script, attempts, retry_on): script это список результатов по попыткам, строка "!Имя" значит «бросить исключение Имя» (ValueError, KeyError, TimeoutError). run возвращает ["ok", значение, число_вызовов] или ["error", имя_исключения, число_вызовов]. Реализуйте retry.
Примеры
run([5], 3, ["TimeoutError"]) // ["ok", 5, 1]
run(["!TimeoutError", "!TimeoutError", 7], 3, ["TimeoutError"]) // ["ok", 7, 3]
run(["!TimeoutError"], 3, ["TimeoutError"]) // ["error", "TimeoutError", 3]
Как подойти
Подсказки: 2
for _ in range(attempts)иtry/exceptвнутри.- Голый
raiseпробрасывает текущее исключение без потери traceback.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.