РАЗБИРАЕМ ПО ШАГАМ
От идеи к работающему коду
Пользователь может ввести буквы вместо числа, а нужного файла может не оказаться. Научимся обрабатывать ожидаемые ошибки, не скрывая настоящие дефекты программы.
Сразу к запуску примера ↓
- 1Рискованная операция
- 2Конкретная ошибка
- 3Понятный ответ
1. Ошибка и исключение
Когда int не может преобразовать строку, возникает ValueError. Выполнение обычного кода прерывается. try позволяет указать небольшой блок, а except — действие при конкретном исключении.
Не помещай всю программу в один огромный try: тогда трудно понять источник сбоя. Лови ошибку рядом с операцией, которая действительно может её вызвать.
text = "abc"try: number = int(text) print(number)except ValueError: print("Введите целое число")2. Деление на ноль
Деление обычных чисел Python на 0 вызывает ZeroDivisionError и для int, и для float. Можно заранее проверить делитель или обработать исключение.
Разные ошибки получают разные объяснения. Буквы вместо числа — не то же самое, что нулевой делитель. Сообщение должно помогать исправить ввод, а не просто говорить «Ошибка».
try: first = float(input("Первое число: ")) second = float(input("Делитель: ")) print(first / second)except ValueError: print("Нужны числа")except ZeroDivisionError: print("На ноль делить нельзя")3. Отсутствующий и пустой файл
FileNotFoundError означает, что файл по указанному пути отсутствует. Пустой существующий файл читается успешно и возвращает пустую строку. Это два разных состояния.
У JSON есть ещё отдельная ошибка JSONDecodeError: файл существует, но текст не является корректным JSON. Не затирай такой файл автоматически — сначала сообщи о проблеме и сохрани данные для исправления.
from pathlib import Pathtry: text = Path("notes.txt").read_text(encoding="utf-8")except FileNotFoundError: print("Файл не найден")else: print("Файл пуст" if text == "" else text)4. Проверка диапазона — отдельное правило
Успешное int("-5") не означает допустимый возраст. Проверка типа ввода и проверка бизнес-правила — разные шаги. Сначала преобразуем, затем проверяем диапазон.
Ожидаемые исключения перечисляем по имени. Пустой except или except Exception вокруг всего кода может скрыть опечатку и создать видимость успеха. Для неизвестной ошибки лучше видеть причину при разработке.
while True: try: age = int(input("Возраст от 0 до 120: ")) except ValueError: print("Введите целое число") continue if 0 <= age <= 120: break print("Возраст вне диапазона")print("Принято:", age)Где легко ошибиться
- Скрыть все ошибки через except: pass.
- Подменить некорректное число нулём без предупреждения.
- Принять пустой файл за отсутствующий.
Проверь понимание: Вызовет ли чтение пустого существующего файла FileNotFoundError?
Нет. Чтение вернёт пустую строку. Исключение относится к отсутствующему пути.
