Глиф Учебники

Как читать ошибку Python (Traceback)

Справочник · Python · 1 минута чтения

Когда программа падает, Python выводит Traceback — отчёт о том, где и что случилось. Читать его нужно снизу вверх:

Текст
Traceback (most recent call last):
  File "C:\Users\anna\main.py", line 3, in <module>
    print(10 / n)
ZeroDivisionError: division by zero

В Python 3.11 и новее под строкой кода могут быть ещё значки ^ и ~ — они показывают, в каком месте строки ошибка.

Ошибка внутри функции

Если ошибка случилась в функции, в отчёте несколько пар строк File: каждая — шаг на пути к ошибке. Нижняя — где ошибка случилась, верхние — откуда к этому месту пришли:

Текст
Traceback (most recent call last):
  File "main.py", line 4, in <module>
    print(average([]))
  File "main.py", line 2, in average
    return sum(nums) / len(nums)
ZeroDivisionError: division by zero

Ошибка в строке 2, в функции average: длина пустого списка — ноль. А вызвали её из строки 4 с пустым списком — там и стоит искать причину.

Частые ошибки

ОшибкаЧто значитПример
SyntaxErrorкод написан не по правилам языканет двоеточия после if, не закрыта скобка или кавычка
IndentationErrorневерные отступыстрока внутри if без отступа
NameError: name 'x' is not definedимени нет: опечатка или переменная ещё не созданаPrint("а"), pritn("а")
TypeErrorдействие не подходит для этого типа"5" + 3, len(5)
ValueErrorтип подходит, а значение — нетint("abc")
IndexError: list index out of rangeнет элемента с таким индексомa[3] в списке из трёх элементов
KeyErrorнет такого ключа в словареd["Минск"], когда ключа нет
AttributeErrorу значения нет такого метода[1, 2].push(3) — у списка append
ZeroDivisionErrorделение на ноль5 / 0, 5 % 0
ModuleNotFoundErrorмодуль не установлен или не найденimport requests без установки
FileNotFoundErrorнет файла по этому путиopen("data.txt") не в той папке

Об ошибках отступов — справка IndentationError: ошибка отступа, об отсутствующих модулях — ModuleNotFoundError: No module named.

SyntaxError — смотрите и строку выше

SyntaxError Python находит ещё до запуска, поэтому не выполняется ни одна строка программы. Номер строки в такой ошибке иногда указывает чуть ниже настоящего места: если в строке 5 не закрыта скобка, Python может заметить это только на строке 6. Начиная с Python 3.10 сообщения стали точнее: например, '(' was never closed прямо говорит, что скобка не закрыта, а expected ':' — что пропущено двоеточие.

Что делать с ошибкой

  1. Прочитайте последнюю строку: вид ошибки часто сразу подсказывает причину.
  2. Откройте строку из line … и посмотрите на значения в ней: какое из них могло быть не тем, что ожидалось.
  3. Если непонятно — добавьте перед этой строкой print с нужными переменными и запустите снова: видно, что в них на самом деле лежит.
  4. Если и это не помогло, найдите текст последней строки поиском — без имён своих переменных и файлов.