После запроса в базу вы получаете список rows, который иногда бывает пустым. Код rows[0] падает с IndexError. Какой вариант лучше, если пустой результат — ожидаемый случай?

AСделать проверку if rows: перед rows[0], и для пустого случая вернуть None или обработать ветку отдельно
BОбернуть весь блок в try и ловить except Exception:, не различая виды ошибок и пропуская пустой случай молча
CПисать rows[0] без проверки и игнорировать IndexError через пустой except, считая его несущественным
DСделать raise IndexError('no rows'), чтобы код всегда падал на пустом результате и требовал ручного разбора
Правильный ответ. Если пустой список возможен по данным, лучше явная проверка, чем ловля ошибок «на всякий случай».

Разбор

Если пустой список — нормальная ситуация по данным, явная проверка if rows: делает логику видимой и помогает читателю кода. Исключения нужны для неожиданных ошибок, а не для штатных веток. Ловля Exception слишком широка и легко скроет реальные баги — например, опечатку в имени переменной. Принудительный raise на пустом результате тоже не решает задачу, а превращает обычный случай в аварийный.

Проверь себя · 1/3разбор после ответа
В отчёте вы считаете сумму и случайно складываете число и строку: total + "10". Какое исключение наиболее вероятно?
Тренировать Python в Telegram

Ещё вопросы по теме «Исключения и отладка»