Декораторы · 8 из 14
На случай сбоя
Задействованы также: Ошибки и исключения
Тарифы отделение берёт из общей базы, а связь с ней пропадает по нескольку раз в день. Ронять из-за этого всю программу нельзя: пусть лучше вернёт запасное значение, а к вечеру видно будет, сколько раз так вышло.
Что сделать
Сделайте так, чтобы пропавшая связь с базой тарифов не роняла всю программу.
Что приходит
zapasnoe— что вернуть, если функция упала
Что вернуть
Декоратор; его обёртка отдаёт результат функции, а при любой ошибке — zapasnoe, считает такие сбои в поле sboi и носит имя функции.
Допишите функцию na_sluchay_sboya в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
@na_sluchay_sboya(0) над тарифом, который делит на вес. Один вызов с нулём уже был. Теперь: tarif(1000) — 100, tarif(0) — запасной 0, а tarif.sboi — уже 2.
Функция принимает запасное значение и возвращает декоратор.
Обёртка принимает любые аргументы, вызывает исходную функцию и возвращает её результат. Если исходная функция бросила исключение (любое, наследник Exception), обёртка гасит его и возвращает запасное значение. Число погашенных сбоев обёртка считает в своём поле «sboi» (до первого сбоя там ноль). Удачные вызовы счётчик не трогают. Имя исходной функции сохраняется.
Образцовый тест целиком
@na_sluchay_sboya(0)
def tarif(gramm):
return 100000 // gramm
tarif(0)
(tarif(1000), tarif(0), tarif.sboi)
(100, 0, 2)
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.