Ошибки Python — подсказка, а не наказание
Сообщение об ошибке — это не наказание, а подсказка: интерпретатор сообщает, на какой строке и почему он не смог продолжить. Чем раньше привыкнуть его читать, тем быстрее идёт работа.
Новички часто видят красный текст и сразу начинают переписывать код наугад. Это похоже на то, как если бы врач, увидев анализ, не стал его читать, а просто выписал все лекарства подряд. Сообщение Python написано по строгим правилам, которые описаны в официальной документации Python, и после пары разборов его структура становится привычной. Запустите программу в редакторе выше. Для Ани она посчитает среднюю оценку, а на Боре остановится — и выведет длинное сообщение. Ниже разберём его по частям: Traceback, номер строки, тип ошибки и пояснение. В браузерном редакторе под выводом появится ещё и подсказка на русском со ссылкой на подробный разбор.
«Опытные программисты не делают ошибок». Это миф: ошибки возникают у всех, разница в том, как быстро их находят. Умение читать сообщения интерпретатора — один из первых профессиональных навыков.
Из чего состоит Traceback
Traceback — это отчёт о том, где программа была в момент остановки. Он состоит из 3 частей: заголовка, цепочки мест в коде и последней строки с типом ошибки.
Аня - средняя оценка: 4.666666666666667
Traceback (most recent call last):
File "main.py", line 9, in <module>
otchet("Боря", [])
File "main.py", line 6, in otchet
print(imya, "- средняя оценка:", srednee(ocenki))
File "main.py", line 3, in srednee
return sum(ocenki) / len(ocenki)
ZeroDivisionError: division by zero
| Часть | Пример | Что означает |
| Заголовок | Traceback (most recent call last) | «Трассировка, последний вызов внизу» — читать нужно снизу |
| Место | File "main.py", line 3, in srednee | Файл, номер строки и функция, где выполнялся код |
| Строка кода | return sum(ocenki) / len(ocenki) | Сама строка, на которой случилась остановка |
| Тип ошибки | ZeroDivisionError | Название класса ошибки — по нему ищут причину |
| Пояснение | division by zero | Короткое описание: здесь — «деление на ноль» |
Первая строка вывода — «Аня - средняя оценка…» — к сообщению не относится. Это нормальный результат первого вызова: программа успела поработать до места остановки. Этим тоже стоит пользоваться: всё, что напечатано до Traceback, выполнилось правильно. Руководство PEP 8 советует давать функциям понятные имена, и в трассировке это окупается: по названию srednee сразу ясно, какой участок программы упал. В новых версиях Python под строкой кода могут стоять значки ^ или ~: они подчёркивают конкретную часть выражения. Описание формата трассировки есть в официальной документации Python[1].
Разбор ошибки Python за 5 шагов
Чтобы разобрать любое сообщение, пройдите 5 шагов: прочитать тип, перевести пояснение, найти строку, понять значения переменных и только потом менять код.
- Тип ошибки. Посмотрите на слово перед двоеточием в последней строке. По нему сразу понятно направление поиска: синтаксис, имена, типы, индексы. Значения всех стандартных названий собраны в документации Python.
- Пояснение. Переведите текст после двоеточия. В нём часто прямо названо имя переменной, ключ или метод, которого не хватает.
- Номер строки. Найдите нижний блок File … line … — это место остановки. Откройте эту строку в редакторе.
- Значения. Спросите себя, что лежало в переменных этой строки. В примере выше список
ocenkiбыл пуст, иlen()вернула 0. - Исправление. Решите, где правильно лечить: в строке остановки, выше по коду или в данных. Здесь логично проверить пустой список в функции
srednee.
def srednee(ocenki):
if not ocenki:
return 0
return sum(ocenki) / len(ocenki)
print(srednee([5, 4, 5]))
print(srednee([]))
Четвёртый шаг важнее всех. Тип ошибки говорит «что», номер строки — «где», но «почему» знает только тот, кто понимает, какие значения были в переменных. Если неясно, временно добавьте print() перед строкой остановки — гадать о значениях не стоит. Больше приёмов собрано в статье про отладку программ.
Номер строки: где искать на самом деле
Номер строки в сообщении — это место, где Python заметил проблему, а не всегда место, где её допустили. Для синтаксических ошибок виновата часто строка выше.
Синтаксические ошибки выглядят иначе: в них нет заголовка Traceback, потому что программа не успела запуститься. Python сначала читает весь файл и проверяет запись, и только потом выполняет. Если скобка не закрыта, интерпретатор может заметить это лишь на следующей строке или в конце файла. Значок ^ показывает примерное место, но смотреть стоит и чуть выше.
chisla = [1, 2, 3
print(sum(chisla))
File "main.py", line 1
chisla = [1, 2, 3
^
SyntaxError: '[' was never closed
Здесь сообщение указывает на открывающую скобку и прямо говорит, что она не закрыта. Старые версии Python в такой ситуации показывали на следующую строку с текстом «invalid syntax», и новички искали ошибку не там. Поэтому правило простое: если строка из сообщения выглядит правильной, проверьте строку над ней. Все варианты синтаксических сообщений собраны в разборе ошибки SyntaxError.
Несколько уровней: когда вызываются функции
Если программа вызывает функции, Traceback показывает всю цепочку вызовов сверху вниз: от основной программы до функции, где случилась остановка. Каждый уровень — 2 строки: место и код.
В примере с оценками цепочка из трёх звеньев: основная программа (<module>) вызвала otchet, та вызвала srednee, и уже там случилось деление на ноль. Нижний уровень показывает, где программа упала. Верхние — откуда туда пришли. Часто исправлять нужно не внизу, а на одном из верхних уровней: например, не передавать пустой список. Слово <module> означает основной код файла, не находящийся внутри функции. Исправлять верхние уровни нужно только после того, как понятна причина внизу. Как устроены функции и вызовы, рассказано в уроке про функции в Python.
Таблица частых ошибок Python
Большинство ошибок Python у школьников укладывается в 9 типов. Узнав тип в последней строке, сверьтесь с таблицей и откройте подробный разбор.
| Тип | Что значит | Частая причина |
| SyntaxError | Нарушены правила записи | Скобка, кавычка, двоеточие, = вместо == |
| IndentationError и отступы | Неверный отступ | Нет сдвига после двоеточия, лишние пробелы |
| NameError: имя не определено | Имя не найдено | Опечатка, регистр, переменная до создания |
| TypeError и типы данных | Операция не подходит для типа | Сложение строки с числом |
| ValueError при вводе | Тип верный, значение нет | int("abc"), пустой ввод |
| ZeroDivisionError | Деление на ноль | Среднее пустого списка |
| IndexError | Нет элемента с таким номером | Индекс равен длине списка |
| KeyError | Нет ключа в словаре | Опечатка или другой регистр в ключе |
| AttributeError | Нет метода у значения | append у строки, None вместо списка |
Все эти типы — встроенные исключения, их полный перечень с описаниями приведён в документации Python, которую выпускает Python Software Foundation. Тип ошибки в последней строке называется одинаково в любой среде: в IDLE, в терминале и в редакторе на сайте. Отличаться может только оформление вокруг последней строки.
Логические ошибки: Python молчит
Если программа работает, но выдаёт неверный ответ, — это логическая ошибка. Python о ней не сообщает: с его точки зрения всё в порядке, ведь каждая команда записана правильно.
Сюда относятся перепутанные знаки сравнения, неверная граница цикла, забытое приведение типа. Например, если сложить две строки «2» и «3», получится «23», и Python не возразит. Ещё один вид — зависание: программа не падает и не заканчивается. Как найти такой цикл, разобрано на странице про бесконечный цикл. Для логических ошибок не стоит ждать подсказок: проверяйте программу на примерах с заранее известным ответом, включая крайние случаи — ноль, пустую строку, одно число.
«Если сообщения нет, программа правильная». Это не подтверждается: отсутствие сообщения означает только, что Python смог выполнить каждую строку. Проверить смысл результата может только тест с известным ответом.
Поиск по тексту сообщения
Если тип и пояснение непонятны, скопируйте последнюю строку сообщения и найдите её текст в поиске или в документации. Свои имена переменных из запроса лучше убрать.
Пояснения к ошибкам стандартные, поэтому кто-то почти наверняка уже разбирал такое же. Но имена у всех свои: ocenki, vozrast, spisok. Если оставить их в запросе, совпадений будет меньше. Официальная документация Python тоже подходит для поиска: в разделе о встроенных исключениях есть каждое название. Удобный шаблон: тип ошибки, двоеточие, общая часть пояснения и слово «Python». Например: «TypeError can only concatenate str (not "int") to str Python». На английском найдётся больше разборов, но на русском тоже достаточно. Читая чужие решения, не копируйте их целиком: сначала поймите, почему ошибка возникла именно у вас.
Когда сообщение не поможет
Сообщение не поможет, если причина вне той строки и той функции, которые в нём указаны. В этих 4 случаях нужен другой подход.
- Неверное значение пришло за 10 строк до остановки. Сообщение укажет на место, где значение использовали, а не где его испортили. Ищите выше через
print(). - Программа зависла и не выдаёт ни 1 сообщения. Это бесконечный цикл, и читать здесь нечего — нужна трассировка.
- Ответ отличается от ожидаемого на 1. Логическая ошибка в границе цикла или индексе: Python считает всё правильным.
- Файл называется так же, как 1 из модулей. Файл
random.pyв папке проекта ломает импорт, и сообщение выглядит загадочно.
Чего делать нельзя
Нельзя закрывать сообщение, не дочитав последнюю строку: в ней почти всегда есть половина ответа. Остальные правила — ниже.
- Нельзя переписывать программу целиком из-за одной ошибки: найдите строку и исправьте её.
- Не следует читать Traceback сверху и останавливаться на первом блоке: место остановки внизу.
- Не стоит менять несколько мест сразу — после каждой правки запускайте программу заново.
- Не допускается прятать сообщения пустым
except: ошибка станет невидимой, но не исчезнет. - Не стоит игнорировать вывод до Traceback — он показывает, какая часть программы уже сработала.
- Нельзя копировать чужое исправление, не поняв его: та же ошибка вернётся в следующей программе.
Источники
[1] The Python Tutorial (официальная документация Python 3). Python Software Foundation. — синтаксис и встроенные функции.
[2] ФИПИ. Методические рекомендации для обучающихся по организации индивидуальной подготовки к ОГЭ 2026 года. Информатика. М., 2026.
[3] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.
Вопросы и ответы
Что значит most recent call last?
«Последний вызов — внизу». Python перечисляет места в порядке вызова, поэтому самое свежее, где программа и остановилась, стоит в конце списка.
Почему сообщения на английском?
Так устроен сам Python, перевода в нём нет. Слов немного, и они повторяются: not defined, out of range, unsupported, expected. В редакторе на сайте рядом с сообщением появляется подсказка на русском.
Что делать, если ошибок Python в коде сразу несколько?
Python останавливается на первой. Исправьте её и запустите снова — появится следующая. Так и двигайтесь, по одной за раз.
Будет ли Traceback на экзамене?
В заданиях ОГЭ с программой на компьютере проверяют ответ, а не сообщения, но среда разработки покажет их так же[2]. Умение быстро прочитать ошибку экономит время на экзамене.
Чем предупреждение отличается от ошибки?
Предупреждение (Warning) сообщает о подозрительном месте, но программа продолжает работу. Ошибка останавливает выполнение. Редакторы также подсвечивают нарушения стиля PEP 8[3] — это не ошибки, а советы.
Как помочь ребёнку, если родитель не программирует?
Попросите прочитать вслух последнюю строку сообщения и перевести её. Уже этот шаг часто приводит к ответу, а родителю не нужно знать Python.