
Информатика: создаём своего цифрового помощника Урок 36 из 38
Ошибка как наблюдаемый факт
Научимся читать ошибку как свидетельство и не терять задачи при неверном вводе.
Где мы на карте
Это урок 36 из 72 и часть блока Python (уроки 27–38). Опорная схема показывает проверяемые переходы. Продолжаем бумажный договор версии 0.3: пять исходов напоминания и исходные вымышленные задачи.
Ситуация и вопрос
Друг ввёл срок 2026-02-29. Помощник не должен молча превратить его в 1 марта или стереть файл. Что именно сломалось: ввод, правило даты или сохранение? Найдём первый шаг расхождения.
Новые слова без пропусков
Исключение — сигнал Python о невозможности выполнить действие по обычному пути. ValueError сообщает о недопустимом значении, а FileNotFoundError — об отсутствии файла. Трассировка ошибки показывает цепочку вызовов и строку сбоя; читать её начинают с последней строки и сверяют с исходным кодом. try содержит рискованную операцию; except ValueError перехватывает только ожидаемую ошибку значения. Отладка — поиск причины по наблюдениям и проверка исправления. Инвариант данных здесь таков: ошибка до записи не меняет сохранённые задачи. Общий except: скрывает программные дефекты и потому не подходит.
Опорный сигнал
Вход → проверка правила → изменение состояния → наблюдаемый результат. Покажите пальцем, на каком шаге программа читает данные, где сравнивает их с договором и где только сообщает результат. Если шага не видно на схеме, найдите его в коде и добавьте в собственную трассу.
Разбираем шаг за шагом
Сначала запишите ожидаемое: неверная дата должна дать INVALID DATE, а старый файл остаться побайтно тем же. Запустите пример, прочтите ветку except ValueError. Затем в копии файла поменяйте одну букву в JSON: это уже ошибка разбора JSONDecodeError, её не следует путать с неверной датой. В assistant_core сначала проверяются весь документ и дата, и только затем создаётся изменённая копия для сохранения. Сравните хеш файла до и после неудачного add.
Предскажите и проверьте
Закройте блок с выводом. По строкам проследите значения имён и напишите точный ожидаемый текст, включая регистр и порядок строк. Только затем выполните код из каталога step-03 командой python3 и сравните посимвольно. Поменяйте один вход; до запуска запишите новый прогноз. Если результат отличается, найдите первую строку расхождения, а не подгоняйте ответ задним числом.
from assistant_core import parse_date
try:
parse_date("2026-02-29")
except ValueError:
print("INVALID DATE")
Ожидаемый вывод
INVALID DATE
Поймайте ошибку
except Exception: pass делает вид, что всё прошло хорошо. Если файл не прочитан, показывать пустой список как будто задач нет — ложь. Разделяйте «нет файла», «неверный JSON» и «нет задач»; показывайте точную причину без выдачи вымышленных данных.
Изменение проекта
assistant.py отдаёт понятные сообщения для ожидаемых ошибок и ненулевой код завершения; assistant_core.py не записывает непроверенный документ. Зафиксируйте неудачные случаи как тесты, чтобы очередное улучшение не превратило ошибку в потерю данных.
Задание и доказательство
На копии tasks.json испытайте: недопустимую дату, повторный id, сломанный JSON и отсутствующий файл. Для каждого случая запишите ожидаемую ошибку, реальное сообщение и изменился ли файл. Исправьте одну ошибку и повторите прежний успешный сценарий: новый путь не должен ломать старый.
Перенос в новую ситуацию
Школьный журнал не открывается: пароль неверен или сеть отключена. Почему сообщение «в журнале ноль оценок» было бы опасным? Предложите два разных сообщения и укажите, какие данные нельзя менять при каждом сбое.
Возврат через 1, 7 и 30 дней
Через 1 день восстановите правило и один граничный пример без страницы. Через 7 дней объясните ошибку в новом примере однокласснику. Через 30 дней повторите тест проекта, проверьте, что прежние записи и вывод сохранились, и снова перенесите правило на другую задачу.
Следующий урок
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.