В коде есть два обработчика: except ValueError: и except Exception:. Почему порядок этих блоков except важен?

AПорядок обработчиков except не важен: интерпретатор Python всё равно выберет самый подходящий блок по типу исключения.
BБолее специфичные исключения (например, ValueError) должны идти раньше, иначе их перехватит более общий блок except Exception:.
CБлок except Exception: всегда должен идти первым, чтобы «ускорить» обработку и сразу ловить любые ошибки в одном месте.
DПорядок блоков except зависит только от версии Python и не имеет реального значения для логики обработки ошибок в коде.
Правильный ответ. Сначала пишут специфичные except, потом более общие, иначе логика обработки ломается.

Разбор

Python проверяет блоки except сверху вниз. Если поставить except Exception: раньше, он перехватит почти всё и до except ValueError: дело не дойдёт. Это ухудшает диагностику и приводит к неправильной обработке ошибок: смысл точечных блоков except теряется, потому что они становятся недостижимы.

Проверь себя · 1/3разбор после ответа
Вы пишете функцию, которая внутри try делает return, а в finally закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в finally при return из try?
Тренировать Python в Telegram

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