Как подключить проверку типов mypy или pyright к проекту?
- Что такое mypy?
- Как читать ошибки mypy?
mypy и pyright — статические анализаторы: читают код и аннотации без запуска и находят несоответствия типов (передали str вместо int, забыли проверить None, вызвали несуществующий метод). Ставят как зависимость разработки, настраивают в pyproject.toml и запускают в CI, чтобы ошибки не попадали в основную ветку. Строгость повышают постепенно: сначала новые модули, потом весь проект.
- Код без аннотаций mypy по умолчанию почти не проверяет
- Для библиотек без типов ставят пакеты stubs (types-requests)
- # type: ignore[код] — точечное отключение с указанием причины
А ещё pyright встроен в редакторы (Pylance) и показывает ошибки прямо при наборе
Подробно
Настройка:
[tool.mypy]
python_version = "3.12"
strict = true
mypy src/
Пример ошибки:
app.py:12: error: Item "None" of "dict[str, str] | None" has no attribute "get"
Значит, функция может вернуть None, а код использует результат без проверки. Исправление — проверить на None или изменить контракт функции.
Внедрение в существующий проект: включить проверку в CI без strict, исправить ошибки, затем включать strict по модулям.
Что хотят услышать
- Статическая проверка без запуска.
- Настройка и запуск в CI.
- Stubs и постепенное внедрение.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗mypy проверяет типы при выполнении программы и одинаково строго разбирает даже код без всяких аннотаций
- ✗mypy запускают только вручную на ноутбуке разработчика
- ✗pyright работает только внутри VS Code
- ✓Анализатор проверяет код без запуска; ставится как dev-зависимость, настраивается в pyproject.toml, идёт в CI
Разбор темы
- Аннотации типов, mypy и Pydantic
Что дают аннотации и кто их проверяет, как аннотировать коллекции, Optional и объединения, обобщённые типы, mypy в проекте, проверка данных Pydantic.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.