Поймал момент, когда приложение «молча» возвращало не то — и я не мог понять почему. Оказалось, спрятанная ошибка проглочена глухой обработкой. Стыдно за такой стиль; хорошо, что вовремя сменил подход: ошибки должны быть видимы и понятны, а клиент — получать честный ответ.

Нейтрально: обрабатывать надо конкретные исключения, логировать причину и возвращать осмысленный код, а не «поймали всё молча».

import logging
logger = logging.getLogger(__name__)

def create_item(name):
    if not name or not name.strip():
        raise ValueError("Пустое имя элемента")

def api_create(request):
    try:
        item = create_item(request.POST.get("name"))
        return JsonResponse({"id": item.id}, status=201)
    except ValueError as e:
        logger.warning("не создан: %s", e)
        return JsonResponse({"error": str(e)}, status=400)

Смена восприятия — от «спрятать» к «показать» — продвинула меня глубже, чем любая зубрёжка. Теперь код ведёт себя предсказуемо даже при плохом вводе, а у меня меньше ночных «а что случилось?».