B. Ломать — не строить

Давайте немного поиграем в «багоюзеров».

Вашему решению будет предоставлена функция func, которая принимает два позиционных параметра и производит с ними некую математическую операцию.

Предложите вызов функции, который гарантированно породит ошибку внутри функции.

Примечание

Если ошибка произойдёт внутри функции, то она будет перехвачена и обработана.
Если же она произойдет в вашем коде, то программа будет завершена с ошибкой.

Пример

Ввод

def func(a, b):
    return a + b

Вывод

Ура! Ошибка!

Ввод

def func(a, b):
    return a * b

Вывод

Ура! Ошибка!

Решение

Достаточно противоречивая задача. С одной стороны, от нас требуют довольно простой вещи – вызвать ошибку внутри функции. С другой стороны в примере есть вывод “Ура! Ошибка!” что поначалу сбивает с толку, ведь в примере самой функции ничего подобного нет.

Это наталкивает на мысль, что мы должны построить конструкцию наподобие

Python
try:
    func()
except Exception:
    print('Ура! Ошибка!')

И большинство решений, которыми делятся ученики именно так и выглядят.

В то же время, в примечании явно указано, что ошибка внутри функции “то она будет перехвачена и обработана”. Это наталкивает на мысль, что на самом деле функции уже содержат нужный блок try/except.

В реальности, чтобы пройти тесты нет необходимости прибегать к помощи try/except. Достаточно придумать несовместимые данные, которые гарантировано вызовут ошибку в математической операции и вызвать функцию.

Очень хотелось бы увидеть референсные решения от Яндекса, но они, по традиции их не показывают.

А раз так, то, ломать – не строить. Придумываем данные, которые вызовут ошибку в любой математической операции.

Посмотреть код

Решение

Python
a = 'str' 
b = (3, 5)

func(a, b)
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии