Debugging простыми словами: как находить и исправлять ошибки в коде

Баг — это ошибка в программе, из-за которой она работает неправильно. Найти причину, исправить её и проверить результат — значит провести отладку. В англоязычных уроках ты встретишь слово debugging.

Представь: герой собирает монеты, а очки уменьшаются. Игра запускается, персонаж двигается — но ошибка всё равно есть. Чтобы её найти, нужно сравнить два результата: что должно было произойти и что получилось на самом деле. С этого начинается отладка, которой занимаются и начинающие, и опытные программисты.

Как найти ошибку: шесть шагов

Отладка похожа на работу детектива: ты собираешь подсказки, выдвигаешь предположение и проверяешь его. Вот как это выглядит на примере игры с монетами:

  1. Определи ожидаемый результат. Например: «За каждую монету счёт увеличивается на одно очко».
  2. Повтори проблему. Запусти игру и снова собери монету. Запомни действия, после которых возникает ошибка.
  3. Найди расхождение. Ожидалось, что счёт изменится с 0 до 1, а получилось −1.
  4. Собери подсказки. Проверь команды, которые меняют счёт: названия переменных, математические знаки и значения. Если появилось сообщение об ошибке, прочитай его.
  5. Проверь предположение. Допустим, вместо плюса стоит минус. Исправь этот знак. Меняй по одной предполагаемой причине за раз — так легче понять, что помогло.
  6. Проверь исправление. Собери одну монету, затем ещё несколько. Убедись, что счёт меняется правильно и связанные с ним действия по-прежнему работают.

Если программа сработала один раз, это ещё не подтверждает, что она правильно обрабатывает все случаи. Например, начисление очков стоит проверить и в начале игры, и после нескольких собранных монет.

Какие ошибки бывают

Для начала удобно различать три группы. Разберём их на примерах Python.

Вид ошибки Что происходит Пример
Синтаксическая Нарушены правила записи кода. После условия if пропущено двоеточие.
Ошибка во время выполнения При выполнении команды возникает проблема. Программа пытается разделить число на ноль.
Логическая Код выполняется, но результат не соответствует задаче. За монету снимается очко вместо начисления.

Синтаксическая ошибка: нарушены правила записи

У языка программирования есть свои правила — примерно как грамматика у русского языка. В Python после условия if нужно двоеточие. Здесь его не хватает:

age = 12

if age >= 12
    print("Можно играть")

Исправленный вариант:

age = 12

if age >= 12:
    print("Можно играть")

Обрати внимание и на отступ перед print(): он показывает, что эта строка относится к условию. Без нужного отступа возникнет IndentationError — разновидность синтаксической ошибки.

Рекомендация по оформлению Python-кода — четыре пробела на каждый уровень отступа. Внутри одного блока отступы должны быть согласованы.

Ошибка во время выполнения: команду не удалось выполнить

Код может быть записан по правилам языка, но столкнуться с проблемой при выполнении:

result = 10 / 0
print(result)

Деление на ноль вызовет ZeroDivisionError. В этом примере выполнение остановится, и до строки print(result) программа не дойдёт.

Другой случай — опечатка pritn вместо print. Сама запись допустима, но если имя pritn нигде не определено, при выполнении возникнет NameError.

Логическая ошибка: программа делает не то, что нужно

Допустим, за монету нужно добавить одно очко. Переменная score хранит счёт, а в коде написано:

score = 0
score = score - 1

print(score)

Получится −1. Для Python вычитание допустимо, поэтому сообщения об ошибке не будет. Но правилам игры результат не соответствует.

Замени вторую строку на score = score + 1 — получишь 1. Чтобы заметить такую ошибку, нужно знать, какой результат ожидается.

Как читать сообщения об ошибках в Python

Если написать:

pritn("Привет!")

Python сообщит:

NameError: name 'pritn' is not defined

Здесь NameError — тип ошибки, pritn — имя, которое не удалось найти, а is not defined означает «не определено». Первая подсказка: проверь написание print.

Вот ещё несколько названий, которые полезно узнавать:

Сообщение Что проверить
SyntaxError Правила записи: двоеточия, скобки, кавычки и другие символы.
NameError Написание имени и то, определено ли оно к моменту использования.
TypeError Подходит ли операция для используемых типов данных.
ZeroDivisionError Не оказался ли делитель равен нулю.
IndentationError Отступы в блоках команд.

Начни с последней строки сообщения: обычно там указаны тип ошибки и пояснение. Затем посмотри на файл и строку, к которым оно относится. Это место обнаружения проблемы; её причина иногда находится раньше — например, в предыдущей строке.

Две частые ловушки: кавычки и типы данных

В записи name = Anna Python воспринимает Anna как имя, а не текст. Если оно не определено, возникнет NameError. Для текста нужны кавычки: name = "Anna".

А выражение "Возраст: " + 10 вызовет TypeError: так складывать строку и число нельзя. Один из способов исправления — преобразовать число в строку:

print("Возраст: " + str(10))

На экране появится Возраст: 10.

Что помогает найти причину ошибки

Пройти код по строкам

Небольшую программу можно проверить на бумаге. Записывай, как меняется значение переменной после каждой команды:

score = 0
score = score + 5
score = score * 2

print(score)

Сначала score равно 0, после сложения — 5, после умножения — 10. Если поменять сложение и умножение местами, получится другой результат: сначала 0 × 2, затем +5. Такая проверка помогает заметить ошибку в порядке действий.

Посмотреть значения через print()

Функция print() позволяет увидеть, что происходит с данными во время выполнения программы:

score = 0
print("Начальный счёт:", score)

score = score + 1
print("Счёт после монеты:", score)

Результат:

Начальный счёт: 0
Счёт после монеты: 1

Так можно проверить, выполняется ли нужная строка и какое значение получается после неё.

Остановить программу в отладчике

Отладчик, или debugger, — специальный инструмент для исследования работающей программы. Он позволяет приостанавливать выполнение, проходить код по шагам и смотреть значения переменных.

Место, где программа должна приостановиться, называют точкой останова — breakpoint. Это похоже на паузу в мультфильме: можно рассмотреть происходящее, прежде чем двигаться дальше.

Для первых небольших задач часто хватает бумаги и print(). Отладчик пригодится, когда захочется подробнее проследить выполнение кода.

Объяснить код игрушке

У этого приёма есть название — метод резинового утёнка, или rubber duck debugging. Возьми игрушку и объясни ей, что должна делать программа и что делает каждая строка на самом деле.

Например: «Здесь я создаю счёт. Здесь меняю его после монеты. Подожди, почему я вычитаю очко?» Иногда объяснение вслух помогает заметить расхождение, которое при чтении ускользало.

Практика: проверь границу условия

Допустим, ты придумал игру, в которую по её правилам можно играть с 12 лет. Программа проверяет возраст так:

age = 12

if age > 12:
    print("Доступ разрешён")
else:
    print("Доступ запрещён")

Код запускается, но двенадцатилетнему игроку отказывает. Причина в знаке >: он означает «строго больше». Для условия «с 12 лет» нужен знак >= — «больше или равно».

Исправь условие на if age >= 12: и проверь три значения:

Возраст Ожидаемый результат
11 Доступ запрещён.
12 Доступ разрешён.
13 Доступ разрешён.

Это проверка границы условия: берём само граничное значение и ближайшие значения по обе стороны от него. Если проверить только возраст 13 лет, ошибку можно не заметить.

Как искать ошибки в Scratch и без компьютера

Для знакомства с отладкой необязательно знать Python. В Scratch тоже можно сравнивать задуманный результат с действиями персонажа. Если он поворачивает в другую сторону, проследи последовательность блоков, найди поворот, исправь его и запусти проект снова.

Игра «Робот с ошибкой»

Понадобятся лист бумаги в клетку, карандаш и два участника.

  1. Нарисуйте поле со стартом и финишем. Отметьте стрелкой, куда робот смотрит в начале.
  2. Договоритесь о командах: «вперёд» — шаг в соседнюю клетку, «налево» и «направо» — поворот на 90 градусов без перемещения.
  3. Первый участник составляет и проверяет маршрут до финиша. Затем меняет одну команду так, чтобы робот сбился с пути.
  4. Второй участник получает маршрут и выполняет команды буквально.
  5. Вместе найдите ошибку, исправьте её и пройдите маршрут заново со старта.

Затем поменяйтесь ролями. Чтобы усложнить игру, добавьте препятствия, ограничьте количество команд или спрячьте две ошибки. Задача — объяснить, какая команда привела к неверному результату, и проверить своё предположение.

Попробуй сам: три задания

1. Почему не появилось сообщение?

message = "Привет!"
pritn(message)

Найди опечатку и исправь её.

2. Почему очки уменьшаются?

score = 5
score = score - 1

print(score)

По правилам игры за новую монету нужно добавить одно очко. Какую строку следует изменить?

3. Что появится на экране?

points = 2
points = points + 3
points = points * 2

print(points)

Вычисли результат на бумаге, затем проверь себя запуском программы.

Ответы и объяснения
  1. Нужно заменить pritn(message) на print(message).
  2. Правильная строка — score = score + 1. Получится 6.
  3. Получится 10: сначала 2 + 3 = 5, затем 5 × 2 = 10.

Если ответ не совпал, пройди строки ещё раз и запиши промежуточные значения. Так будет видно, на каком шаге возникло расхождение.

Как взрослым помочь ребёнку

Начинайте с инструмента, который ребёнок уже немного знает: подойдут и Scratch, и Python, и маршрут на бумаге. Попросите его объяснить, что должно произойти, а затем вместе проследите выполнение команд.

Полезные вопросы: «Какой результат ты ожидал?», «На каком шаге получилось иначе?», «Как проверить твою догадку?» Они помогают разобраться в причине ошибки.

Если поиск зашёл в тупик, сделайте перерыв или попросите подсказку у преподавателя. При обращении за помощью покажите код, сообщение об ошибке и расскажите, какой результат ожидался. Вопрос «Почему здесь возникает ошибка?» поможет получить объяснение, а не только готовое исправление.

Источники и материалы для продолжения

Материалы ниже — на английском языке:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Последние

Алгоритмы: простое объяснение, понятные примеры и задания

Алгоритмы: простое объяснение, понятные примеры и задания

04.10.2026
Баг в программировании: объяснение для детей

Баг в программировании: объяснение для детей

05.06.2026
Переменная в программировании: объяснение для детей

Переменная в программировании: объяснение для детей

04.06.2026