После запроса в базу вы получаете список 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 на пустом результате тоже не решает задачу, а превращает обычный случай в аварийный.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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