Sobes.tech
Назад к вопросам
Junior — Middle
62

Имели ли опыт реализации процесса проверки и корректировки входных данных?

Компании, где спрашивали
Snap IT

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

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

Определение:

Проверка и корректировка входных данных — это процесс, в котором приложение сначала убеждается, что данные соответствуют ожидаемому формату и бизнес-правилам, а затем при необходимости приводит их к нужному виду. Проверка отвечает на вопрос «можно ли это принять», а корректировка — «как безопасно привести это к рабочему виду». Обычно это включает проверку обязательности полей, типов, длины, диапазонов, формата дат, email, а также очистку пробелов, приведение регистра и преобразование строк в числа.

Пример использования:

Например, при регистрации пользователя можно проверить, что email заполнен и соответствует формату, пароль не короче заданного минимума, а имя не состоит только из пробелов. После этого данные можно нормализовать: убрать лишние пробелы, привести email к нижнему регистру, а номер телефона очистить от пробелов и дефисов.

import re

def validate_and_normalize_user(data: dict) -> dict:
    errors = []

    name = data.get("name", "").strip()
    email = data.get("email", "").strip().lower()
    age = data.get("age")

    if not name:
        errors.append("name is required")

    if not email or not re.match(r"^[^@\s]+@[^@\s]+\.[^@\s]+$", email):
        errors.append("valid email is required")

    if age is None:
        errors.append("age is required")
    else:
        try:
            age = int(age)
            if age < 18:
                errors.append("age must be at least 18")
        except ValueError:
            errors.append("age must be a number")

    if errors:
        raise ValueError(", ".join(errors))

    return {
        "name": name,
        "email": email,
        "age": age,
    }

Пояснение кода:

В этом примере функция получает словарь с пользовательскими данными и сначала нормализует строки с помощью strip() и lower(). Затем проверяет обязательные поля и формат email через регулярное выражение. Поле age преобразуется в int, после чего проверяется бизнес-правило — возраст не меньше 18. Если найдено хотя бы одно нарушение, функция собирает список ошибок и выбрасывает исключение, иначе возвращает очищенные данные.

Ключевые моменты:

  • Валидацию лучше делать как можно раньше, до записи в БД и до отправки данных в бизнес-логику.
  • Проверка и корректировка — разные действия: сначала убедиться в корректности, затем нормализовать.
  • Ошибки желательно собирать в понятном виде, чтобы пользователь видел все проблемы сразу.
  • Не стоит «тихо» исправлять критичные поля, если это может исказить смысл данных.
  • Полезно отделять техническую валидацию от бизнес-правил: формат телефона и возрастные ограничения — это разные уровни проверки.
  • Для Python часто используют ручную валидацию, dataclasses, pydantic или схемы в зависимости от проекта.