Давайте немного поиграем в «багоюзеров».
Вашему решению будет предоставлена функция func
, которая принимает два позиционных параметра и производит с ними некую математическую операцию.
Предложите вызов функции, который гарантированно породит ошибку внутри функции.
Примечание
Если ошибка произойдёт внутри функции, то она будет перехвачена и обработана.
Если же она произойдет в вашем коде, то программа будет завершена с ошибкой.
Пример
Ввод
def func(a, b):
return a + b
Вывод
Ура! Ошибка!
Ввод
def func(a, b):
return a * b
Вывод
Ура! Ошибка!
Решение
Достаточно противоречивая задача. С одной стороны, от нас требуют довольно простой вещи – вызвать ошибку внутри функции. С другой стороны в примере есть вывод “Ура! Ошибка!” что поначалу сбивает с толку, ведь в примере самой функции ничего подобного нет.
Это наталкивает на мысль, что мы должны построить конструкцию наподобие
try:
func()
except Exception:
print('Ура! Ошибка!')
И большинство решений, которыми делятся ученики именно так и выглядят.
В то же время, в примечании явно указано, что ошибка внутри функции “то она будет перехвачена и обработана”. Это наталкивает на мысль, что на самом деле функции уже содержат нужный блок try/except.
В реальности, чтобы пройти тесты нет необходимости прибегать к помощи try/except. Достаточно придумать несовместимые данные, которые гарантировано вызовут ошибку в математической операции и вызвать функцию.
Очень хотелось бы увидеть референсные решения от Яндекса, но они, по традиции их не показывают.
А раз так, то, ломать – не строить. Придумываем данные, которые вызовут ошибку в любой математической операции.
Посмотреть код
Решение
a = 'str'
b = (3, 5)
func(a, b)