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