Alterna · учебный материал
Трассировка и поиск ошибок
41.1: Трассировка и поиск ошибок. Короткая теория, один пример и пошаговая трасса Python.
Что в этом материале
- Как это устроено
- Один пример в исполнении
- Запомнить
Содержание и основные понятия
Отладка начинается с воспроизводимого входа, ожидаемого результата и первого шага, где фактическое состояние отличается.
суть и практика
11 класс
ОГЭ №6/16
ЕГЭ №16/17/23–27
01
Как это устроено
Отладка — это не случайная перестановка строк. Сначала воспроизводят вход, затем находят первое состояние, которое нарушает контракт программы.
Синтаксис.
Код не разбирается: пропущен символ, нарушен отступ или структура языка.
Выполнение.
Код стартует, но получает исключение: ZeroDivisionError, IndexError, KeyError и другие.
Логика.
Программа завершается, но результат нарушает условие.
Сложность.
Решение верно на малом входе, но не проходит ограничение времени или памяти.
02
Один пример в исполнении
Запусти короткую программу и переходи по строкам. Визуализатор показывает только код, текущую строку, переменные и вывод.
Минимальный контрпример — самый простой вход, на котором ошибка воспроизводится. Он сокращает трассу и делает причину заметной.
assert
проверяет предположение прямо в коде: при ложном условии возникает
AssertionError
. Перед сдачей отладочный print и assert обычно удаляют, если формат вывода должен быть строгим.
Карта алгоритма
Читай слева направо, затем запускай код.
1
Начало
2
Зафиксировать вход
3
Выполнить одну строку
4
Сравнить с ожидаемым состоянием
5
Найти первый сбой
03
Запомнить
Проверь пустой вход, границы, повторы и все отрицательные значения.
Сначала зафиксируй ожидаемый результат, затем меняй код.
Разделяй неверный ответ и медленное решение: это разные виды дефектов.
Синтаксис этой страницы
assert condition, message
Останавливает программу с AssertionError, если condition ложно.
len(values)
Позволяет проверить размер данных.
enumerate
Помогает печатать индекс и состояние в диагностической трассе.
print
Временно показывает состояние; не оставляй лишний вывод в строгом формате.
try / except
Перехватывает ожидаемое исключение, но не должен скрывать ошибку контракта.
max
Встроенный максимум; для ручной отладки полезно сравнить с собственным алгоритмом.
return
Возвращает результат для отдельного тестирования функции.