Короткий ответ
В коде отсутствует обработка ошибок внешнего вызова — при любом сбое (таймаут, 500, сетевая ошибка) необработанное исключение приведёт к падению обработчика с generic 500 Internal Server Error.
Как это работает подробнее
Исключение из httpx.get (например ConnectError, TimeoutException) не перехвачено, значит оно «всплывёт» до обработчика фреймворка, который вернёт generic 500.
Пример кода
example.py
@app.get("/weather")
def get_weather():
try:
response = httpx.get("https://weather-api/current", timeout=5)
response.raise_for_status()
return response.json()
except httpx.HTTPError:
raise HTTPException(status_code=503, detail="weather service unavailable")Что использовать на практике
- Практика. Нужно явно перехватывать ожидаемые сетевые ошибки и возвращать осмысленный ответ клиенту (502/503) либо fallback-значение; также логировать причину сбоя для диагностики.
Подводные камни
- Риск. Перехватывать Exception целиком без разбора и «проглатывать» ошибку молча; не задавать таймаут вообще, усиливая проблему.