Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Python: Pydantic, validators, data validation, Python, type hints

Что такое валидаторы в Pydantic и какую задачу они решают?

Вопрос проверяет понимание валидаторов в Pydantic — механизма для настройки проверки данных, который позволяет выходить за рамки стандартной валидации типов и добавлять сложную бизнес-логику.

Короткий ответ

Валидаторы в Pydantic — это специальные методы, которые позволяют выполнять пользовательскую проверку данных. Они используются, когда стандартной проверки типов недостаточно. Например, можно проверить, что номер телефона имеет правильный формат или что возраст пользователя положительный. Валидаторы делают код надёжнее и понятнее.

Длинный ответ

Pydantic — это библиотека для валидации данных и работы с настройками в Python, которая активно использует аннотации типов. Хотя Pydantic отлично справляется с базовой проверкой типов (например, что поле является строкой или целым числом), часто возникают ситуации, когда нужно применить более сложные правила. Именно для этого и существуют валидаторы.

Что такое валидаторы?

Валидаторы — это методы, помеченные декоратором @validator или @field_validator (в Pydantic V2), которые вызываются для проверки конкретных полей модели. Они получают значение поля, могут его преобразовать, проверить по кастомной логике и либо вернуть валидное значение, либо вызвать ошибку.

Как и где применяются?

Валидаторы применяются везде, где требуется гарантировать целостность и корректность данных перед их использованием. Типичные сценарии:

  • Проверка формата строк (email, телефон, URL).
  • Валидация числовых диапазонов (возраст от 0 до 150).
  • Зависимая проверка нескольких полей (например, дата окончания должна быть позже даты начала).
  • Нормализация данных (приведение телефона к единому формату).

Пример кода

Рассмотрим простую модель пользователя с валидацией возраста и email.

from pydantic import BaseModel, validator, ValidationError

class User(BaseModel):
    name: str
    age: int
    email: str

    @validator('age')
    def age_must_be_positive(cls, v):
        if v <= 0:
            raise ValueError('Возраст должен быть положительным числом')
        return v

    @validator('email')
    def email_must_contain_at(cls, v):
        if '@' not in v:
            raise ValueError('Некорректный email')
        return v.lower()  # Нормализуем email к нижнему регистру

# Пример использования
try:
    user = User(name="Анна", age=25, email="ANNA@example.com")
    print(user)  # email будет "anna@example.com"
    invalid_user = User(name="Иван", age=-5, email="ivan")
except ValidationError as e:
    print(e.errors())  # Выведет ошибки по возрасту и email

Вывод

Валидаторы в Pydantic — мощный инструмент для обеспечения качества данных. Их стоит применять, когда стандартных возможностей проверки типов недостаточно и требуется внедрить специфичную для предметной области логику валидации, что особенно актуально при разработке API, обработке пользовательского ввода или работе с конфигурациями.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Python

    Python

  • FastAPI

    FastAPI

Ключевые слова

#Pydantic

#validators

#data validation

#Python

#type hints

Подпишись на Python Developer в телеграм