@matweykai
Standart coder ; )

Нужно ли проверять типы в Python?

Сейчас пишу свой pet-project и возник вопрос нужно ли проверять типы переменных, которые приходят в функцию?
Вот пример работы с полем класса, вокруг которого построено приложение
@property
def mnf_year(self) -> int:
    return self.mnf_year

@mnf_year.setter
def mnf_year(self, year: int):
    if year is None:
        raise AttributeError("Manufacture year can't be None")

    if not isinstance(year, int):
        raise AttributeError("Manufacture year should be integer value")

    if year > datetime.now().year or year <= 1900:
        raise AttributeError("Manufacture year should be in range[1900, now]")

    self.mnf_year = year

Просто помню, как Марк Лутц говорил, что не следует накладывать ограничения на типы, тк функция может работать с несколькими типами данных. Подскажите как лучше делать?
  • Вопрос задан
  • 347 просмотров
Решения вопроса 1
lxstvayne
@lxstvayne
Люблю Python
Конечно, нужно, ведь мы ожидаем конкретные типы задавая параметры для функции. Можно проверять соответствие типам вручную, но есть альтернативный, более удобный и красивый, подход -- использование библиотеки pydantic, которая специализируется на валидации, а именно декоратор validate_arguments. Валидация помогает на ранних и даже на поздних этапах дебажить ошибки в логике вашего кода. Это очень помогает, даже если на проекте один человек.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Для Python является идиоматичной обработка исключений вместо проверок допустимости действий.
Ответ написан
Griboks
@Griboks
нужно ли проверять типы переменных, которые приходят в функцию?

def mnf_year(self, year: int):

Ну так вы уже их указали в сигнатуре. Ваше дело сделано. Вы сказали пользователям кода, что они обязаны передать вам int. Если они передадут вам что-то другое, то это уже их проблемы, что программа сломается. Проаннотировав тип, вы сняли с себя ответственность.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы