Вы пишете функцию 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 маскирует ошибку и легко проигнорировать.
Можно заниматься бесплатно
Готовим вопросы…
Три вопроса по теме этой страницы, с объяснениями.
Ещё вопросы по теме «Исключения и отладка»
- В обработчике данных используется конструкция `try`/`except`/`finally`. Внутри `try` произошла ошибка, она поймана в `except`. Что произойдёт с кодом в блоке `finally`?
- Вы парсите событие в словарь `event`. Что произойдёт при обращении `event['currency']`, если ключа `currency` в словаре нет?
- В отчёте вы считаете сумму и случайно складываете число и строку: `total + "10"`. Какое исключение наиболее вероятно?
- Скрипт получает список строк, но иногда он короче ожидаемого. Что произойдёт при обращении `rows[3]`, если в списке всего 3 элемента?
- Вы пишете функцию, которая внутри `try` делает `return`, а в `finally` закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в `finally` при `return` из `try`?
- Все вопросы по «Исключения и отладка» →