33 lines
2 KiB
Markdown
33 lines
2 KiB
Markdown
---
|
||
name: python-development
|
||
description: Python-specific standards: imports, logging, error handling, tests. Use alongside code-standards for Python projects. Also when user says "python", "питон", "python开发".
|
||
---
|
||
|
||
# Python Development
|
||
|
||
## 1. Импорты
|
||
- Только **абсолютные импорты** от корня проекта. Относительные (`.` и `..`) **запрещены**
|
||
- Все импорты — строго в начале файла, перед любым другим кодом. Импорты внутри функций/методов/условий **запрещены**
|
||
- Группировка: стандартная библиотека → сторонние пакеты → внутренние модули
|
||
- Порядок в группе: по алфавиту
|
||
|
||
## 2. Запрет global
|
||
- Ключевое слово **`global`** запрещено. Передача данных — только через аргументы функций и возвращаемые значения
|
||
|
||
## 3. Обработка ошибок
|
||
- Всегда через `try/except/else`. Блок `else` — для кода без исключений
|
||
- Логирование через **Loguru**:
|
||
```python
|
||
from loguru import logger
|
||
|
||
try:
|
||
# логика
|
||
except Exception as ex:
|
||
logger.bind(error=ex, error_type=type(ex).__name__).error("Понятное описание контекста ошибки")
|
||
```
|
||
|
||
## 4. Тестирование
|
||
- Запуск: `uv run pytest`
|
||
- В проекте настроено `asyncio_mode = "auto"`. **Не пиши** `@pytest.mark.asyncio` вручную
|
||
- При правке конкретного файла запускай только связанные тесты: `uv run pytest tests/path_to_test.py`
|
||
- Цикл исправления: запустил → упало → проанализировал → исправил → перезапустил упавший тест
|