Вы пишете функцию def get_user(user_id): ... и ожидаете, что user_id — число. Если кто-то передал строку '42', какое исключение обычно уместнее поднять, чтобы явно сообщить о неверном типе входных данных?
AПоднять
ValueError('bad type'): применяется при допустимом типе, но недопустимом значенииBПоднять
TypeError('user_id must be int'): стандартный сигнал о несовпадении типа аргументаCПоднять
KeyError('user_id'): исключение для отсутствующего ключа в словаре или mappingDПоднять
IndexError('user_id'): исключение при выходе за границы последовательностиПравильный ответ. Неверный тип аргумента — частый случай для
TypeError; неверное значение при корректном типе — для ValueError.Разбор
Разделяйте причины ошибок: если аргумент пришёл не того типа (строка вместо числа), это проблема типа и уместен TypeError. Если тип правильный, но значение недопустимо (например, отрицательное число там, где нельзя), используют ValueError. KeyError поднимают при отсутствующем ключе в словаре, IndexError — при выходе за границы последовательности; для проверки типа аргумента ни то, ни другое не подходит.
Проверь себя · 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`?
- Все вопросы по «Исключения и отладка» →