Поле age_text приходит как строка и может быть "18", "" или "N/A". Вы хотите получить число или None, не скрывая неожиданные баги. Какой подход наиболее практичный в прикладной аналитике без регулярных выражений?
AВсегда делать
int(age_text) без проверок и не ловить исключения.BСначала сделать
s = age_text.strip(), затем если s.isdigit() — int(s), иначе вернуть None.CДелать
float(age_text) и округлять всегда.DИспользовать
eval(age_text) и считать, что данные безопасны.Правильный ответ. Иногда лучше предварительная проверка (например,
strip + isdigit), чем массовый try/except.Разбор
Сравнивайте подходы: (1) обработка через исключения и (2) проверка условий. Если формат простой (цифры или пусто), проверка через strip() и isdigit() делает поведение явным и уменьшает количество исключений в потоке. При этом неожиданные случаи можно логировать отдельно, а не скрывать через слишком широкий except.
Проверь себя · 1/3разбор после ответа
Вы пишете функцию
parse_age(age_text), которая должна принимать только неотрицательный возраст. Как лучше явно сообщить об ошибке входных данных, если пришло -5?Ещё вопросы по теме «Исключения и отладка»
- В обработчике данных вы используете конструкцию `try`/`except`/`finally`. Внутри `try` происходит ошибка, она поймана в `except`. Что произойдёт с кодом в `finally`?
- Вы парсите событие в словарь `event`. Что произойдёт при обращении `event["currency"]`, если ключа `currency` в словаре нет?
- В отчёте вы считаете сумму и случайно складываете число и строку: `total + "10"`. Какое исключение наиболее вероятно?
- Скрипт получает список строк, но иногда он короче ожидаемого. Что произойдёт при обращении `rows[3]`, если в списке всего 3 элемента?
- Вы пишете функцию, которая внутри `try` делает `return`, а в `finally` закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в `finally` при `return` из `try`?
- Все вопросы по «Исключения и отладка» →