Теория
Некоторые ошибки являются частью обычного сценария
Раньше мы читали traceback, чтобы исправить код. Но пользователь действительно может написать слово там, где программа просит число. Код исправен; ему нужен понятный путь восстановления.
text = input("Количество: ")try: count = int(text)except ValueError: print("Нужно целое число")else: print(count * 2)В блок try помещена только рискованная операция. Вexcept ValueError находится восстановление именно после неверного преобразования, а else выполняется после успешного ввода.
У исключения должна быть известная причина
- ValueError от int можно ожидать из-за пользовательского текста.
- NameError означает ошибку автора программы и требует исправления кода.
- except без типа скрыл бы обе причины под одним сообщением.
- Узкий except ValueError сохраняет настоящий NameError видимым.
Цикл позволяет спокойно попросить значение ещё раз
Если без числа продолжать нельзя, знакомый while повторяет запрос. Успешное преобразование завершает цикл через break.
while True: try: count = int(input("Количество: ")) except ValueError: print("Введите целое число") else: break print(count)Сначала решаем, можно ли восстановиться
- Назовите риск. Какое конкретное исключение ожидается?
- Назовите восстановление. Что полезного программа сделает после него?
- Сузьте try. Оставьте только связанную рискованную операцию.
- Не прячьте неизвестное. Остальные ошибки должны сохранить traceback.
- Проверьте два пути. Запустите успешный и ошибочный ввод.
Практика
Назовите ожидаемую ошибку
int получает строку неподходящего формата и вызывает ValueError.
Не спрячьте опечатку
except ValueError обрабатывает только ошибку нужного типа и оставляет другие сбои видимыми.
Продолжите после успеха
Блок else выполняется только если try завершился без исключения.
Завершите повторный ввод
После успешного ввода break завершает цикл и программа продолжает работу.
Проверьте два пути локально
Сообщение появляется после первого ValueError; ввод 3 завершает цикл без новой ошибки.
Итог
Вы умеете сохранить понятный пользовательский сценарий после ожидаемой ошибки и при этом не спрятать настоящую проблему программы.
Этот навык пригодится при чтении файлов и в финальном менеджере задач, где ввод и сохранённые данные не всегда оказываются правильными с первого раза.
Прогресс
0 / 5Вы ещё не решали задания