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

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

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

Примечание

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

Пример

Ввод

def func(a, b, c):
    return ''.join(map(str, (a, b, c)))

Вывод

Ура! Ошибка!

Ввод

def func(a, b):
    return set(a) ^ set(b)

Вывод

Ура! Ошибка!

Решение

Задача аналогична первой по сути, но гораздо труднее по реализации.

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

Это хорошо, но дальше третьего теста продвинуться таким способом не удастся.

Вспоминаем, что мы умеем создавать собственные классы. Что, если создать пустой класс? В силу того, что у класса не будет определена ни одна операция, он будет выдавать ошибку при попытки выполнить с ним любую операцию – математическую или любую другую, включая большинство операций преобразования типов. Проблему вызовет разве что функция str() метод __repr__ для которой унаследуется от класса object – прародителя всех классов в python. Но это и дает нам ключ решения проблемы – написать свой метод, который и будет генерировать ошибку.

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

Решение

Python
class MyClass:

    def __repr__(self) -> str:
        raise Exception


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