Ошибки и исключения · 9 из 13
Повтор с разбором причины
Задействованы также: Функции
Программа регистратуры обращается к базе. Иногда база занята — тогда имеет смысл повторить. Иногда запрос неверен — тогда повторять бессмысленно, и надо сказать сразу.
Что сделать
Обращайтесь к базе с повторами — но только когда она занята, а не когда запрос неверен.
Что приходит
zapros— функция без аргументов: обращение к базеpopytok— сколько раз пробовать; если не передали — 3
Что вернуть
Результат удачного вызова; повтор — только при TimeoutError; попытки кончились — выбросить последнюю такую ошибку; другие ошибки не перехватывать.
Допишите функцию poluchit в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
kapriznaya дважды отвечает TimeoutError("занято"), а на третий раз — «данные». Ваша функция отдаёт "данные", вызовов было три. Если бы запрос упал с KeyError, повторять было бы бессмысленно — эта ошибка выходит наружу сразу.
Функция принимает другую функцию без аргументов и число попыток (целое больше нуля, по умолчанию 3). Повторяет вызов при ошибке TimeoutError, но не больше заданного числа раз. Возвращает результат удачного вызова. Если попытки кончились, выбрасывает последнее пойманное исключение. Ошибки других типов не перехватываются вовсе.
Образцовый тест целиком
schet = {"n": 0}
def kapriznaya():
schet["n"] += 1
if schet["n"] < 3:
raise TimeoutError("занято")
return "данные"
(poluchit(kapriznaya), schet['n'])
('данные', 3)
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.