Вопрос проверяет понимание обработки ошибок в API и проектирования корректных и предсказуемых ответов для клиента.
RuntimeError не несёт бизнес-смысла и плохо подходит для API. Клиент получает неинформативный ответ и часто статус 500, даже если ошибка ожидаемая. Такие ошибки сложно логировать и анализировать. В результате API становится непредсказуемым для пользователей.
RuntimeError — это общее исключение, сигнализирующее о проблеме выполнения без уточнения причины и контекста.
API — это контракт, и ошибки в нём должны быть частью этого контракта.
Отсутствие семантики
неясно, ошибка клиента или сервера
невозможно понять, что именно пошло не так
Неправильные HTTP-статусы
бизнес-ошибка превращается в 500
клиент не понимает, можно ли повторять запрос
Плохая диагностика
ошибки сложно классифицировать
логи теряют смысл без контекста
Нарушение контракта API
формат ошибок нестабилен
фронтенд вынужден обрабатывать «всё подряд»
if balance < amount:
raise RuntimeError("Not enough money")
использовать доменные исключения
маппить их на HTTP-статусы
возвращать структурированные ошибки
В API ошибки должны быть осмысленными, предсказуемыми и частью публичного контракта, а не побочным эффектом выполнения кода.