Как читать ошибку Python (Traceback)
Когда программа падает, Python выводит Traceback — отчёт о том, где и что случилось. Читать его нужно снизу вверх:
Traceback (most recent call last):
File "C:\Users\anna\main.py", line 3, in <module>
print(10 / n)
ZeroDivisionError: division by zero- последняя строка — главное: вид ошибки (
ZeroDivisionError) и пояснение (division by zero— деление на ноль); - строка
File …, line 3— в каком файле и в какой строке случилась ошибка; - строка под ней — сам код этой строки.
В 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 ':' — что пропущено двоеточие.
Что делать с ошибкой
- Прочитайте последнюю строку: вид ошибки часто сразу подсказывает причину.
- Откройте строку из
line …и посмотрите на значения в ней: какое из них могло быть не тем, что ожидалось. - Если непонятно — добавьте перед этой строкой
printс нужными переменными и запустите снова: видно, что в них на самом деле лежит. - Если и это не помогло, найдите текст последней строки поиском — без имён своих переменных и файлов.