Частые ошибки Python
что написано и что это значит
Что это
Настоящие сообщения Python 3.13 — все получены запуском, не по памяти. Читать их надо снизу вверх: последняя строка говорит, что случилось, строки выше — где (статья 2.12).
Имена и типы
NameError: name 'cuty' is not defined
Имени не существует. Обычно опечатка или переменная, объявленная ниже по
тексту, чем использована.
AttributeError: 'str' object has no attribute 'push'
У объекта нет такого метода. Частый признак того, что ИИ перепутал язык: push
есть у массивов в JavaScript, у списков Python — append.
TypeError: can only concatenate str (not "int") to str
Сложили строку с числом. Почти всегда значение пришло из переменной окружения
или из ввода и осталось строкой (статья 13.4).
TypeError: 'NoneType' object is not subscriptable
Обратились по ключу или индексу к None. Значит, функция выше вернула None
вместо данных — и это не проверили.
TypeError: f() missing 1 required positional argument: 'b'
Вызвали с меньшим числом аргументов. Часто после правки сигнатуры, когда
обновили не все вызовы.
UnboundLocalError: cannot access local variable 'n' where it is not associated with a value
Внутри функции присвоили значение переменной, которая объявлена снаружи. Python
считает её локальной. Лечится передачей аргументом, а не global.
Данные
KeyError: 'temp'
В словаре нет такого ключа. Самая частая ошибка при разборе ответов API: ключ
есть, когда всё хорошо, и исчезает, когда сервер вернул ошибку.
IndexError: list index out of range
Обратились за границу списка. Проверить, что список не пуст, — и помнить, что
последний элемент это [-1], а не [len(xs)].
ValueError: invalid literal for int() with base 10: '-2.5'
Строка не превращается в число. int() не понимает дробную запись — нужно
float(), а потом уже округление.
ZeroDivisionError: division by zero
Деление на ноль. Обычно знаменатель — длина пустого списка или счётчик, который
не успел вырасти.
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Разбирали как JSON то, что JSON не является: пустую строку, HTML-страницу
ошибки, обрезанный файл. Печатать надо не разобранные данные, а сырой текст
ответа.
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd8 in position 96
Открыли двоичный файл как текст или текст в другой кодировке. Для двоичных —
режим "rb", для текста — явная encoding=.
Файлы и модули
FileNotFoundError: [Errno 2] No such file or directory: 'cities.json'
Файла нет там, откуда запущена программа. Относительный путь считается от
рабочей папки, а не от файла с кодом (статья 12.1).
ModuleNotFoundError: No module named 'rekvests'
Библиотека не установлена или написана с ошибкой. Если имя выглядит странно —
возможно, её не существует вовсе (статья 4.8).
ImportError: cannot import name 'x' from partially initialized module 'y' (most likely due to a circular import)
Два модуля импортируют друг друга. Это не ошибка Python, а сигнал о
перепутанных слоях (статья 13.1).
Синтаксис и выполнение
IndentationError: expected an indented block after function definition on line 1
Потерян отступ. Обычно при вставке кода кусками.
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
Одно равно вместо двух в условии. Python подсказывает прямо в тексте ошибки.
RecursionError: maximum recursion depth exceeded
Функция вызывает сама себя без условия остановки. В трейсбеке видно
[Previous line repeated 996 more times].
sqlite3.IntegrityError: UNIQUE constraint failed: cities.name
Нарушено правило таблицы: запись с таким значением уже есть. Это не поломка,
а сработавшая защита — её надо поймать и вернуть понятный ответ
(статья 14.2).