Вы пишете функцию parse_age(age_text), которая должна принимать только неотрицательный возраст. Как лучше явно сообщить об ошибке входных данных, если пришло -5?
AВернуть строку
'error' и продолжить расчёты с этим значением дальшеBВывести предупреждение через
print и продолжить работу с отрицательным возрастомCСделать
raise KeyError('age'), чтобы пометить проблему отсутствующего ключаDСделать
raise ValueError('age must be non-negative') и прервать выполнениеПравильный ответ. Для некорректного значения входных данных уместен
raise ValueError(...).Разбор
Когда входные данные нарушают ожидания (например, возраст отрицательный), полезно «сломать» выполнение явным исключением. raise ValueError(...) делает ошибку понятной, позволяет быстро отладить источник плохих данных и не продолжать расчёты с некорректными значениями. KeyError сигнализирует об отсутствующем ключе в словаре — это другая семантика. Возврат строки или вывод через print маскирует ошибку и легко проигнорировать.
Проверь себя · 1/3разбор после ответа
Вы преобразуете поле из CSV:
price = int(text). Иногда там встречается 'N/A'. Какой вариант обработки лучше всего соответствует цели «ловить только ожидаемую ошибку, а не всё подряд»?Ещё вопросы по теме «Исключения и отладка»
- В обработчике данных используется конструкция `try`/`except`/`finally`. Внутри `try` произошла ошибка, она поймана в `except`. Что произойдёт с кодом в блоке `finally`?
- Вы парсите событие в словарь `event`. Что произойдёт при обращении `event['currency']`, если ключа `currency` в словаре нет?
- В отчёте вы считаете сумму и случайно складываете число и строку: `total + "10"`. Какое исключение наиболее вероятно?
- Скрипт получает список строк, но иногда он короче ожидаемого. Что произойдёт при обращении `rows[3]`, если в списке всего 3 элемента?
- Вы пишете функцию, которая внутри `try` делает `return`, а в `finally` закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в `finally` при `return` из `try`?
- Все вопросы по «Исключения и отладка» →