Коротко: почти все ошибки новичка — из четырёх: забытое двоеточие, сдвинутый отступ, перепутанные типы (число и строка) и обращение к переменной до того, как ей что-то присвоили. Python сам пишет, в какой строке.

Ошибка в Python — не поломка, а обычный этап работы. Язык сам пишет, что именно ему не понравилось и в какой строке. Проблема новичка не в том, что ошибки случаются, а в том, что сначала он не умеет читать сообщения о них. Это проходит за несколько занятий.

Отступы: самая частая причина, почему код не работает

В Python отступ в начале строки — часть синтаксиса, а не оформления. Именно он показывает, что входит в цикл или в условие, а что нет. В большинстве других языков для этого есть фигурные скобки, в Python — пробелы.

Поэтому самая распространённая ситуация на первых занятиях: код выглядит правильным, но одна строка сдвинута на пробел, и программа ведёт себя странно или не запускается вовсе. Ребёнок ищет ошибку в логике, а она в пробеле.

Лечится это быстро — редактор подсвечивает уровни отступов, и за пару недель рука сама держит структуру.

Одно «равно» вместо двух

В коде = означает «положи значение», а == — «сравни». Тема условий if / else в программе идёт третьей, и именно на ней эта путаница встречается почти у каждого.

Причина понятна: в школе знак равенства означает ровно сравнение. Приходится сознательно разводить два смысла. Когда ребёнок один раз увидел, как программа вместо проверки перезаписала значение, — запоминает надолго.

Забытые двоеточие и скобки

После if, for, while и def ставится двоеточие. Забыть его — классика первых занятий, и Python честно сообщает SyntaxError с указанием строки.

То же со скобками в вызове функции: print без скобок ничего не напечатает. Обе ошибки полезны тем, что учат главному навыку — читать сообщение, а не гадать.

Путаница типов: число против строки

Вторая тема программы — переменные и типы данных, и там же возникает первый конфликт: введённое с клавиатуры значение приходит как строка, даже если это цифры. Попытка прибавить к нему число даёт ошибку.

Это не мелочь, а первая встреча с мыслью, что данные бывают разного рода и преобразование между ними нужно делать осознанно. Позже, в темах про файлы и API, эта привычка оказывается очень кстати.

Как читать сообщение об ошибке

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

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

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

Ошибка, которой не видно вообще

Отдельный вид, самый неприятный: программа запускается, ничего не краснеет, а результат неправильный. Красного текста нет, искать негде.

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

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

Бесконечный цикл

Цикл while работает, пока условие истинно. Если внутри забыть изменить переменную, программа не остановится никогда. На занятии это выглядит эффектно: экран заполняется текстом, пока кто-нибудь не нажмёт остановку.

Полезный побочный эффект — ребёнок своими глазами видит, что компьютер не «догадается», чего от него хотели. Он выполнит буквально написанное, сколько бы это ни длилось.

Значат ли частые ошибки, что ребёнку сложно?

Нет. Количество ошибок на старте почти ничего не говорит о способностях — оно говорит о том, что ребёнок пишет код, а не переписывает готовое. Более тревожен обратный сигнал: когда ошибок нет, потому что ничего не пробуется.

Что делает преподаватель, когда ребёнок застрял?

Не показывает ответ сразу. Сначала просит прочитать сообщение об ошибке вслух и посмотреть на указанную строку. В группе до 6 учеников это реально сделать с каждым — собственно, поэтому группа и небольшая.

Как помочь дома, если вы не программист?

Достаточно двух вопросов: «что написано в ошибке?» и «какую строку она называет?». Отвечать на них ребёнок будет сам, и этого обычно хватает. Решать за него не нужно.

Сколько времени занимает отладка

Больше, чем само написание, — и это не признак плохого кода, а нормальная пропорция. Во взрослой разработке она примерно такая же.

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

Две ошибки, которые приходят позже

Первые пять из этой статьи случаются в первом месяце. Есть ещё две, появляющиеся, когда программы становятся длиннее.

Переменная, названная как попало. a, b, x1 — пока программа на десять строк, это не мешает. На ста строках собственный код перестаёт читаться, и подросток тратит минуты на вспоминание, что же такое x1.

Копия вместо функции. Тот же кусок скопирован трижды с мелкими отличиями. Работает, пока не надо что-то изменить — тогда править приходится в трёх местах, и в одном из них обязательно забудется.

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

Чего мы не делаем за ребёнка

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

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

Исключение одно — когда ребёнок застрял надолго и начинает злиться. Тогда подсказка нужна сразу: польза от самостоятельного поиска заканчивается там, где начинается отчаяние.

Почему это нормальная часть обучения

Программа первой ступени — 156 занятий в течение 18 месяцев — построена так, что темы наращиваются постепенно: переменные, условия, циклы, функции, списки, и лишь потом Turtle и Minecraft. Каждая новая тема добавляет свой набор типичных ошибок, и каждая отрабатывается, пока не перестанет мешать.

Если интересно, что получается на другом конце этого пути, посмотрите что кладут в портфолио до 18 лет. А с какого возраста браться за язык — разобрано отдельно: с какого возраста учить Python.

Как выглядят первые четыре занятия, на которых эти ошибки и появляются, описано здесь: первый месяц на курсе Python. А о том, почему отступы сбивают именно тех, кто пришёл из блочной среды, — в разборе перехода со Scratch.