Программирование с ИИ
ENRU
В

Частые ошибки 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).