Разбери ошибку по трейсбэку и дай минимальную правку — без общих рассуждений о хорошем коде.
Трейсбэк целиком: [ТРЕЙСБЭК: Traceback (most recent call last): File "app/orders.py", line 84, in build_report total = sum(o.amount for o in orders) TypeError: unsupported operand type(s) for +: 'int' and 'NoneType']
Что делает код: [КОНТЕКСТ: собирает отчёт по заказам за день, amount приходит из базы, у части заказов он пустой]
Версия и окружение: [СРЕДА: Python 3.11, Postgres через psycopg2, запускается по cron в 6 утра]
Что я уже пробовал: [ПРОБОВАЛ: добавил print перед строкой 84, вижу, что в списке есть заказ с amount=None]
Ответ строго в таком порядке:
1. Тип ошибки и что она означает на человеческом языке — одна строка.
2. Причина в этом коде: какая строка, какое значение, почему упало. Не «возможно», а по трейсбэку.
3. Минимальная правка кодом «было → стало». Именно минимальная: та, что чинит падение.
4. Правильная правка, если минимальная лечит симптом: где на самом деле должна обрабатываться пустота —
в запросе, в модели или при чтении.
5. Как поймать это раньше в следующий раз: одна проверка или один тест.
Отсечка. Не предлагай обернуть всё в try-except и залогировать — падение исчезнет, а отчёт молча
станет неверным. Не советуй сменить библиотеку или переписать на другой архитектуре: мне нужно
починить эту строку. Не выдумывай, что в базе: если из трейсбэка не видно, откуда берётся None,
скажи, какой запрос надо посмотреть.
Проверка перед выдачей: назови вход, на котором ошибка воспроизводится, и убедись, что после твоей
правки на этом входе результат не просто не падает, а верный.
Собрать под себя — поля заполнены рабочими значениями, меняйте их и промпт выше обновится сам