Перейти к содержанию

Практикум: из исключений Python в коды статуса gRPC

Один внутренний ValueError проходит через три настоящих gRPC-сервера: без интерцептора (UNKNOWN с внутренним текстом), со стандартными настройками библиотеки (INVALID_ARGUMENT с безопасным описанием) и с явной таблицей приложения (INTERNAL, internal_error).

Другие проверки охватывают семь прикладных и внутренних ошибок, успешную выдачу счёта, явный context.abort(), статус в метриках и исходные ошибки в диагностике. Ожидаемые прикладные отказы не считаются серверными сбоями. Отдельная проверка ставит приёмник диагностики снаружи обработчика ошибок и подтверждает, что исходное исключение до него не доходит.

Хранение данных, метрики и приёмник ошибок заменены локальными имитаторами; ни база данных, ни внешние сервисы не используются. Тестовая закрытая строка помогает обнаружить утечку деталей в ответе. Логи ожидаемых исключений подавлены, чтобы были видны результаты проверок.

Нужен uv. Запустите из каталога docs/blog/lab/2026-09-07-python-exceptions-to-grpc-status-codes:

uv run --no-project --python 3.13 --with-requirements requirements.txt python mapping_lab.py

Версии закреплены в requirements.txt: grpc-server-kit 0.2.0, servicewright 0.13.1, grpcio 1.84.0, FastAPI 0.141.1, Uvicorn 0.53.0, HTTPX 0.28.1 и cryptography 50.0.1.

Сохраните соседний каталог 2026-09-07-production-grpc-server: практикум использует его прикладной код, имитаторы и зависимости.

Исходный код практикума на GitHub.