// инструмент

Расшифровщик ошибок Python

Вставь трейсбек или последнюю строку ошибки: получишь перевод, что она значит, частые причины и починку с примером кода.

Ctrl+Enter тоже работает.

примеры:

Разбор идёт в браузере: текст ошибки и код никуда не отправляются.

До запуска: SyntaxError, IndentationError, TabError 32

SyntaxError: invalid syntax. Perhaps you forgot a comma?

неверный синтаксис. Возможно, ты забыл запятую?

Два значения стоят рядом без разделителя: в списке, кортеже или аргументах функции Python ждал запятую.

частые причины

  • Пропущена запятая между элементами списка или аргументами.
  • Две строки в кавычках подряд без оператора между ними.

как починить

Найди в подсвеченной строке два значения подряд и поставь между ними запятую.

было

nums = [1, 2 3]

стало

nums = [1, 2, 3]

SyntaxError: invalid syntax в справочнике

SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

неверный синтаксис. Может быть, ты имел в виду == или := вместо =?

В условии стоит присваивание =, а сравнение пишется двумя знаками ==.

частые причины

  • Одиночное = внутри if, while или elif.

как починить

Замени = на == в условии.

было

if x = 5:
    print("пять")

стало

if x == 5:
    print("пять")

SyntaxError: invalid syntax в справочнике

SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?

не хватает скобок в вызове print. Ты имел в виду print(...)?

В Python 3 print это функция, и её аргументы пишут в скобках. Запись без скобок осталась в Python 2.

частые причины

  • Код или пример из старого учебника на Python 2.

как починить

Возьми аргументы print в круглые скобки.

было

print "Привет"

стало

print("Привет")

SyntaxError: invalid syntax в справочнике

SyntaxError: unterminated string literal (detected at line 3)

незавершённая строка: кавычка открыта, но не закрыта до конца строки

Python дошёл до конца строки кода, а закрывающей кавычки не встретил.

частые причины

  • Забыта закрывающая кавычка.
  • Апостроф внутри строки в одинарных кавычках: 'it's'.
  • Кавычки-ёлочки «» вместо " или ' (Python не считает их кавычками).

как починить

Закрой строку той же кавычкой, какой открыл. Если внутри есть апостроф, возьми строку в двойные кавычки.

было

print('Привет, мир)

стало

print('Привет, мир')

SyntaxError: invalid syntax в справочнике

SyntaxError: unterminated triple-quoted string literal (detected at line 12)

незавершённая многострочная строка в тройных кавычках

Строка, открытая тремя кавычками, не закрыта до конца файла. Всё после неё Python считает текстом.

частые причины

  • Закрывающие """ потеряны или в них две кавычки вместо трёх.
  • Docstring открыт, а закрыт обычной кавычкой.

как починить

Найди открывающие тройные кавычки и поставь такие же закрывающие.

SyntaxError: invalid syntax в справочнике

SyntaxError: invalid character '«' (U+00AB)

недопустимый символ ««» (код U+00AB)

В коде за пределами строки и комментария стоит символ, которого нет в синтаксисе Python: типографская кавычка, тире, кириллическая буква.

частые причины

  • Код скопирован из мессенджера, Word или статьи: кавычки " заменились на «» или “”, дефис на тире.
  • Кириллическая буква в имени переменной или в операторе: русская «с» вместо латинской c.
  • Символ из оформления, например • или →, попал в код.

как починить

Перенабери подсвеченный символ с клавиатуры: прямые кавычки " и ', дефис -, латинские буквы.

было

print(«Привет»)

стало

print("Привет")

SyntaxError: invalid syntax в справочнике

SyntaxError: invalid non-printable character U+00A0

недопустимый непечатаемый символ U+00A0

В коде спрятан невидимый символ, чаще всего неразрывный пробел (U+00A0) из документа или веб-страницы.

частые причины

  • Код скопирован с сайта или из документа, где обычные пробелы заменены неразрывными.

как починить

Удали отступы в подсвеченной строке и набери пробелы заново с клавиатуры.

SyntaxError: invalid syntax в справочнике

SyntaxError: expected 'except' or 'finally' block

ожидался блок except или finally

Блок try не может стоять один: после него обязательно идёт except или finally.

частые причины

  • Написан try, а обработка ошибки ещё не дописана.
  • except стоит с другим отступом и не относится к этому try.

как починить

Добавь после тела try блок except Ошибка: на том же уровне отступа, что и try.

было

try:
    x = int(text)

стало

try:
    x = int(text)
except ValueError:
    x = 0

try/except в справочнике

SyntaxError: expected ':'

ожидался символ :

Заголовок if, for, while, def или class должен заканчиваться символом :, а его нет.

частые причины

  • Забыто двоеточие в конце строки с if, else, for, while, def, class, try.

как починить

Поставь : в конце подсвеченной строки.

было

def hello()
    print("Привет")

стало

def hello():
    print("Привет")

SyntaxError: invalid syntax в справочнике

SyntaxError: '(' was never closed

скобка ( так и не была закрыта

Открывающая скобка ( осталась без пары. Python часто показывает ошибку строкой ниже, на следующем выражении.

частые причины

  • Не закрыты скобки вызова функции или списка.
  • Скобка закрыта не тем символом: ) вместо ].

как починить

Посчитай открывающие и закрывающие скобки в подсвеченной строке и в строке над ней.

было

print("Сумма:", total
total = 0

стало

print("Сумма:", total)
total = 0

SyntaxError: invalid syntax в справочнике

SyntaxError: unmatched ')'

лишняя закрывающая скобка )

Закрывающая скобка ) стоит там, где открытой скобки уже нет.

частые причины

  • Скобка продублирована при правке.
  • Открывающая скобка удалена, а закрывающая осталась.

как починить

Удали лишнюю ) или верни открывающую скобку.

было

print(len(items)))

стало

print(len(items))

SyntaxError: invalid syntax в справочнике

SyntaxError: closing parenthesis ']' does not match opening parenthesis '('

закрывающая скобка ] не соответствует открывающей (

Скобки перепутаны: открыта (, а закрыта ].

частые причины

  • Список, кортеж и вызов функции вложены друг в друга, и порядок закрытия сбился.

как починить

Закрывай скобки в обратном порядке открытия: последняя открытая закрывается первой.

было

total = sum([1, 2, 3)]

стало

total = sum([1, 2, 3])

SyntaxError: invalid syntax в справочнике

SyntaxError: f-string: single '}' is not allowed

f-строка: одиночная } не допускается

Внутри f-строки фигурные скобки открывают выражение, поэтому одна } без пары запрещена.

частые причины

  • Литеральная скобка в тексте f-строки.
  • Выражение {...} закрыто дважды.

как починить

Чтобы вывести саму скобку, удвой её: {{ и }}.

было

print(f"Словарь: {d}}")

стало

print(f"Словарь: {d}")

f-строки в справочнике

SyntaxError: f-string: expecting '}'

f-строка: ожидалась закрывающая }

Выражение в f-строке открыто скобкой {, а закрывающей } нет.

частые причины

  • Забыта } после имени переменной.
  • Внутри выражения стоят кавычки того же вида, что и у всей строки.

как починить

Закрой каждое {выражение} и не используй внутри него те же кавычки, что снаружи.

было

print(f"Привет, {name")

стало

print(f"Привет, {name}")

f-строки в справочнике

SyntaxError: f-string: invalid syntax

f-строка: неверный синтаксис внутри выражения

Код внутри {} f-строки не разбирается: это обычное выражение Python, и ошибка в нём.

частые причины

  • Внутри {} стоит присваивание или двоеточие без формата.
  • Кавычки внутри выражения совпали с кавычками строки.
  • Внутри {} оказался текст, а не выражение.

как починить

Вынеси сложное выражение в переменную перед f-строкой и подставь её имя.

было

print(f"Итог: {total = 5}")

стало

total = 5
print(f"Итог: {total}")

f-строки в справочнике

SyntaxError: f-string: invalid conversion character: expected 's', 'r', or 'a'

f-строка: недопустимый символ преобразования, ожидались s, r или a

Восклицательный знак внутри {} Python читает как начало преобразования !r, !s или !a, а дальше стоит что-то другое.

частые причины

  • Сравнение != внутри f-строки без пробелов в старых версиях Python.
  • Лишний ! перед закрывающей скобкой.

как починить

Вынеси сравнение в переменную до f-строки или поставь пробелы вокруг !=.

было

print(f"{a!=b}")

стало

differ = a != b
print(f"{differ}")

f-строки в справочнике

SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?

нельзя присвоить значение литералу. Может быть, ты имел в виду ==?

Слева от = стоит число или строка, а присваивать можно только имени.

частые причины

  • Перепутан порядок: 5 = x вместо x = 5.
  • В условии написано = вместо ==.

как починить

В присваивании имя слева, значение справа. В сравнении используй ==.

было

if 5 = x:

стало

if x == 5:

SyntaxError: invalid syntax в справочнике

SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='?

нельзя присвоить значение вызову функции. Может быть, ты имел в виду ==?

Слева от = стоит вызов функции, а результат вызова изменить нельзя.

частые причины

  • len(items) = 0 вместо сравнения.
  • Попытка «записать» значение через функцию вместо переменной.

как починить

Сравнивай через ==, а сохраняй результат в переменную: count = len(items).

было

if len(items) = 0:

стало

if len(items) == 0:

SyntaxError: invalid syntax в справочнике

SyntaxError: unexpected character after line continuation character

неожиданный символ после символа переноса строки \

Обратный слэш \ вне строки означает перенос на следующую строку, поэтому после него ничего стоять не может.

частые причины

  • Код скопирован из чата или JSON с экранированными кавычками: print(\"Привет\").
  • Путь Windows написан без кавычек.
  • После \ в конце строки стоит пробел или комментарий.

как починить

Убери \ перед кавычками. Пути пиши строкой: "C:\\data" или r"C:\data".

было

print(\"Привет\")

стало

print("Привет")

SyntaxError: invalid syntax в справочнике

SyntaxError: 'return' outside function

return за пределами функции

return возвращает значение из функции, а эта строка в функцию не входит: скорее всего, у неё пропал отступ.

частые причины

  • return стоит на уровне файла, а не внутри def.
  • Отступ тела функции потерян при копировании.

как починить

Сдвинь return внутрь функции тем же отступом, что и остальное тело.

было

def double(x):
    y = x * 2
return y

стало

def double(x):
    y = x * 2
    return y

функции в справочнике

SyntaxError: 'break' outside loop

break за пределами цикла

break управляет циклом, а здесь стоит вне for и while.

частые причины

  • Отступ сбился, и строка выпала из тела цикла.
  • break написан в if, который сам не внутри цикла.

как починить

Убедись, что строка с break стоит внутри тела цикла по отступу.

циклы в справочнике

SyntaxError: invalid decimal literal

неверная запись числа

Сразу после цифр идёт буква, и Python не может понять, число это или имя.

частые причины

  • Имя переменной начинается с цифры: 2nd = ....
  • Единицы измерения приклеены к числу: 10px, 100руб.
  • Пропущен оператор между числом и именем: 2x вместо 2 * x.

как починить

Имена начинай с буквы, единицы храни отдельно, умножение пиши явно.

было

width = 10px

стало

width = 10

SyntaxError: invalid syntax в справочнике

SyntaxError: leading zeros in decimal integer literals are not permitted

ведущие нули в десятичных числах не допускаются

Число вроде 007 Python не принимает: ноль в начале раньше означал восьмеричную запись.

частые причины

  • Дата или номер записаны числом с нулём впереди: 08, 007.

как починить

Убери ведущие нули или храни значение строкой: "08".

было

month = 08

стало

month = 8

SyntaxError: invalid syntax в справочнике

SyntaxError: unexpected EOF while parsing

неожиданный конец файла при разборе

Файл закончился раньше, чем Python дочитал конструкцию: не хватает закрывающей скобки или тела блока.

частые причины

  • Не закрыта скобка в последних строках.
  • После if, for или def в конце файла нет тела.

как починить

Проверь последние строки: закрой скобки и допиши тело блока.

SyntaxError: invalid syntax в справочнике

SyntaxError: invalid syntax

неверный синтаксис

Python не смог разобрать строку и не нашёл более точной подсказки. Стрелка ^ под строкой показывает, где он споткнулся, но причина часто на строке выше.

частые причины

  • Пропущено двоеточие после if, for, while, def или class.
  • Не закрыта скобка или кавычка на предыдущей строке.
  • Ключевое слово использовано как имя: class = 5, if = 3.
  • Оператор пропущен или продублирован: x = = 5, a b.
  • Пример из другого языка: else if, &&, ; в конце строки.

как починить

Прочитай строку со стрелкой и одну строку над ней. Проверь двоеточия, парность скобок и кавычек, имена переменных.

было

if x > 5
    print(x)

стало

if x > 5:
    print(x)

SyntaxError: invalid syntax в справочнике

SyntaxError

синтаксическая ошибка

Python не смог разобрать код до запуска. Текст после двоеточия уточняет, что именно не сошлось.

частые причины

  • Пропущен или лишний символ рядом со стрелкой ^.
  • Конструкция из другого языка или из более новой версии Python.

как починить

Сверь строку со стрелкой с примером из справочника по этой конструкции.

SyntaxError: invalid syntax в справочнике

IndentationError: unexpected indent

неожиданный отступ

Строка сдвинута вправо, хотя предыдущая строка не открывала блок. Python не понимает, к чему относится этот отступ.

частые причины

  • Лишние пробелы в начале строки после копирования.
  • Продолжение кода после блока не вернулось на прежний уровень.
  • Пустая строка со случайными пробелами внутри функции.

как починить

Выровняй строку по строке выше: тело блока на 4 пробела глубже заголовка, остальное на том же уровне.

было

x = 5
    print(x)

стало

x = 5
print(x)

IndentationError в справочнике

IndentationError: expected an indented block after 'if' statement on line 3

ожидался блок с отступом после if на строке 3

Заголовок if на строке 3 открыл блок, а тела с отступом после него нет.

частые причины

  • Тело блока написано без отступа.
  • Блок пока пустой: заголовок есть, кода под ним нет.

как починить

Сдвинь тело на 4 пробела вправо. Если блок пока пустой, напиши в нём pass.

было

if x > 0:
print("плюс")

стало

if x > 0:
    print("плюс")

IndentationError в справочнике

IndentationError: expected an indented block after function definition on line 1

ожидался блок с отступом после объявления function на строке 1

После def или class на строке 1 должно идти тело с отступом.

частые причины

  • Тело функции написано без отступа.
  • Функция объявлена, а тело ещё не написано.

как починить

Сдвинь тело на 4 пробела. Для заглушки напиши pass или ....

было

def greet(name):
print(name)

стало

def greet(name):
    print(name)

IndentationError в справочнике

IndentationError: unindent does not match any outer indentation level

отступ не совпадает ни с одним внешним уровнем

Строка вернулась влево на уровень, которого нет: например, заголовок на 0 пробелов, тело на 4, а эта строка на 2.

частые причины

  • Смешаны табы и пробелы.
  • Отступ набран вручную и не кратен уровню блока.

как починить

Перенабери отступы в этом блоке только пробелами, по 4 на уровень. В редакторе включи показ пробелов.

IndentationError в справочнике

IndentationError

ожидался блок с отступом

После заголовка блока Python ждал тело с отступом и не нашёл его.

частые причины

  • Тело блока без отступа.
  • Пустой блок.

как починить

Добавь отступ телу блока или напиши в нём pass.

IndentationError в справочнике

TabError

непоследовательное использование табов и пробелов в отступах

В одном блоке часть строк сдвинута табами, часть пробелами. Для Python это разные отступы, даже если на экране они выглядят одинаково.

частые причины

  • Код собран из двух источников с разными настройками редактора.
  • Часть строк набрана клавишей Tab, часть пробелами.

как починить

Замени все табы на пробелы: в редакторе есть команда «преобразовать отступы».

IndentationError в справочнике

Имена: NameError, UnboundLocalError 3

NameError: name 'total' is not defined

имя total не определено

Python встретил имя total, которому ещё ничего не присвоено в этом месте программы.

частые причины

  • Опечатка или другой регистр: Total и total это разные имена.
  • Переменная создаётся ниже по коду или внутри другой функции.
  • Текст написан без кавычек: print(привет) вместо print("привет").
  • Модуль не импортирован: math.sqrt(x) без import math.
  • Функция вызвана раньше, чем объявлена через def.

как починить

Найди, где total получает значение, и убедись, что это происходит раньше и в той же области видимости. Если Python предлагает похожее имя после «Did you mean», обычно это и есть опечатка.

было

name = input()
print(nmae)

стало

name = input()
print(name)

NameError и области видимости в справочнике

NameError

ошибка имени

Python не нашёл имя, к которому обращается код.

частые причины

  • Опечатка в имени.
  • Имя определено позже или в другой функции.

как починить

Проверь написание и место, где имя получает значение.

NameError и области видимости в справочнике

UnboundLocalError: cannot access local variable 'count' where it is not associated with a value

локальная переменная count используется до присваивания

Внутри функции переменной count где-то присваивается значение, поэтому Python считает её локальной. А читается она раньше, чем это присваивание выполнилось.

частые причины

  • count += 1 внутри функции, а count создан снаружи.
  • Переменная присваивается только в одной ветке if, а читается после него.

как починить

Передай значение параметром и верни результат через return. Если это счётчик, объяви global count в начале функции, но лучше обойтись без глобальных переменных.

было

count = 0
def bump():
    count += 1

стало

def bump(count):
    return count + 1
count = bump(0)

NameError и области видимости в справочнике

Типы и вызовы: TypeError, AttributeError 26

TypeError: 'int' object is not iterable

объект типа int нельзя перебрать

В for, list(), sum() или распаковке оказалось одиночное значение типа int, а нужна коллекция или строка.

частые причины

  • Цикл по числу: for i in 5 вместо for i in range(5).
  • Функция вернула None (нет return), а результат перебирают.
  • В sum() или max() передано число вместо списка.

как починить

Перебирай коллекцию или range(n). Если тип NoneType, проверь, что функция возвращает значение через return.

было

for i in 5:
    print(i)

стало

for i in range(5):
    print(i)

TypeError и ValueError в справочнике

TypeError: argument of type 'int' is not iterable

аргумент типа int нельзя перебрать

Оператор in справа требует строку, список или другую коллекцию, а стоит значение типа int.

частые причины

  • "7" in 2007: число вместо строки.
  • Переменная перезаписана числом или None.

как починить

Приведи значение к строке или списку: "7" in str(year).

было

if "7" in 2007:

стало

if "7" in str(2007):

TypeError и ValueError в справочнике

TypeError: 'int' object is not subscriptable

к объекту типа int нельзя обратиться по индексу

Квадратные скобки [...] применены к значению типа int, у которого нет элементов.

частые причины

  • Переменная перезаписана числом, а раньше была списком.
  • Функция вернула None (тип NoneType): нет return или return без значения.
  • Скобки перепутаны: func[1] вместо func(1).

как починить

Проверь, что в переменной именно список, строка или словарь. Для NoneType найди функцию, которая должна была вернуть значение.

было

n = 5
print(n[0])

стало

digits = str(5)
print(digits[0])

TypeError и ValueError в справочнике

TypeError: 'int' object is not callable

объект типа int нельзя вызвать

После значения типа int стоят круглые скобки, а вызывать можно только функции и классы.

частые причины

  • Переменная названа как встроенная функция: sum = 0, а потом sum(items).
  • Пропущен оператор: 2(x + 1) вместо 2 * (x + 1).
  • Скобки перепутаны: items(0) вместо items[0].

как починить

Не называй переменные sum, list, max, str, input. Между числом и скобкой пиши *. Индекс бери квадратными скобками.

было

sum = 0
print(sum([1, 2]))

стало

total = 0
print(sum([1, 2]))

TypeError и ValueError в справочнике

TypeError: unsupported operand type(s) for +: 'int' and 'str'

оператор + не поддерживает типы int и str

Python не умеет применять + к значениям типов int и str вместе.

частые причины

  • input() возвращает строку, а к ней прибавляют число.
  • Один из операндов None: функция ничего не вернула.
  • Складываются список и число.

как починить

Приведи типы явно: int(input()) для чисел, str(n) для склейки текста.

было

age = input()
print(age + 1)

стало

age = int(input())
print(age + 1)

преобразование типов в справочнике

TypeError: can only concatenate str (not "int") to str

к str можно присоединить только str, а не int

Оператор + для str означает склейку, и второй операнд тоже должен быть str, а не int.

частые причины

  • Строка + число при выводе: "Возраст: " + 25.
  • Список + одиночный элемент вместо append.

как починить

Собирай текст f-строкой: f"Возраст: {age}". Элемент в список добавляй через append.

было

print("Возраст: " + 25)

стало

print(f"Возраст: {25}")

TypeError и ValueError в справочнике

TypeError: '<' not supported between instances of 'str' and 'int'

сравнение < не поддерживается между str и int

Сравнивать через < можно значения одного рода, а здесь str и int.

частые причины

  • Число из input() не приведено к int и сравнивается с числом.
  • В списке смешаны строки и числа, и его сортируют.

как починить

Приведи оба значения к одному типу до сравнения.

было

age = input()
if age < 18:

стало

age = int(input())
if age < 18:

преобразование типов в справочнике

TypeError: greet() missing 1 required positional argument: 'name'

при вызове greet() не хватает обязательных аргументов: 'name'

Функция greet объявлена с параметрами, а при вызове им не передали значения: не хватает 1.

частые причины

  • Функция вызвана без аргументов или с меньшим числом, чем в def.
  • Метод класса вызван через класс, а не через объект.

как починить

Передай значения для каждого параметра из def или задай параметрам значения по умолчанию.

было

def greet(name):
    print("Привет,", name)
greet()

стало

def greet(name):
    print("Привет,", name)
greet("Аня")

функции в справочнике

TypeError: greet() takes 1 positional argument but 2 were given

greet() принимает 1 аргумента, а передано 2

В вызов greet передали больше значений, чем параметров в её объявлении.

частые причины

  • Лишний аргумент при вызове.
  • В методе класса забыт параметр self: Python передаёт объект первым аргументом.

как починить

Сверь вызов с def. Для метода класса первым параметром напиши self.

было

class Cat:
    def meow():
        print("мяу")
Cat().meow()

стало

class Cat:
    def meow(self):
        print("мяу")
Cat().meow()

функции в справочнике

TypeError: object of type 'int' has no len()

у объекта типа int нет длины

len() считает элементы строки, списка или словаря, а значение типа int из элементов не состоит.

частые причины

  • len(12345): длина числа. Сначала преврати его в строку.
  • Переменная перезаписана числом или None.

как починить

Для числа: len(str(n)). Иначе проверь, что в переменной коллекция.

было

print(len(12345))

стало

print(len(str(12345)))

TypeError и ValueError в справочнике

TypeError: list indices must be integers or slices, not str

индексы list должны быть целыми числами или срезами, а не str

К списку обратились как к словарю: в квадратных скобках стоит str, а список принимает только номер позиции.

частые причины

  • items["name"], хотя items это список словарей: сначала выбери элемент по номеру.
  • В цикле for item in items внутри написано items[item]: item уже сам элемент.

как починить

Обращайся к элементу списка по номеру или перебирай элементы напрямую.

было

for user in users:
    print(users[user])

стало

for user in users:
    print(user)

списки в справочнике

TypeError: string indices must be integers, not str

индексы строки должны быть целыми числами

К строке обратились по ключу, как к словарю. Строка отдаёт символы только по номеру.

частые причины

  • JSON прочитан как текст и не разобран через json.loads.
  • В цикле по словарю перебираются ключи-строки, а код ждёт вложенные словари.

как починить

Проверь, что в переменной словарь, а не строка: print(type(x)).

словари в справочнике

TypeError: 'str' object cannot be interpreted as an integer

объект типа str нельзя использовать как целое число

Функция ждала целое число, а получила str. Чаще всего это range() со строкой из input().

частые причины

  • range(input()) без приведения к int.
  • Дробное число там, где нужен индекс или счётчик.

как починить

Приведи значение к целому: range(int(n)).

было

n = input()
for i in range(n):

стало

n = int(input())
for i in range(n):

преобразование типов в справочнике

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'

аргумент int() должен быть строкой или числом, а не list

В int() передали значение типа list, а преобразовать в число можно только строку или число.

частые причины

  • int(input().split()): split вернул список, а int нужен каждому элементу.
  • В int() попал None или целый список.

как починить

Преобразуй элементы по одному: list(map(int, input().split())).

было

nums = int(input().split())

стало

nums = list(map(int, input().split()))

преобразование типов в справочнике

TypeError: must be str or None, not tuple

нужна строка, а передан tuple

Метод строки ждал одну строку, а получил tuple. Например, split и strip принимают только строку-разделитель.

частые причины

  • text.split((",", ";")): несколько разделителей кортежем.
  • В replace передан список вместо строки.

как починить

Передавай одну строку. Несколько разделителей обрабатывай по очереди или через re.split.

было

parts = text.split((",", ";"))

стало

parts = text.replace(";", ",").split(",")

методы строк в справочнике

TypeError: sequence item 0: expected str instance, int found

элемент 0: ожидалась строка, найден int

join склеивает только строки, а в списке на позиции 0 лежит int.

частые причины

  • ", ".join(numbers) для списка чисел.

как починить

Преобразуй элементы в строки: ", ".join(map(str, numbers)).

было

print(", ".join([1, 2, 3]))

стало

print(", ".join(map(str, [1, 2, 3])))

методы строк в справочнике

TypeError: Value after * must be an iterable, not int

после * должна идти коллекция, а не int

Звёздочка в вызове распаковывает список или кортеж, а здесь после неё стоит int.

частые причины

  • print(*n), где n число, а не список.

как починить

Распаковывай только коллекции: print(*items). Одиночное значение передавай как есть.

было

print(*5)

стало

print(5)

функции в справочнике

TypeError: 'list' object is not an iterator

объект типа list не итератор

next() работает только с итератором, а list это коллекция: её сначала нужно превратить в итератор через iter().

частые причины

  • next(items) для списка.
  • Функция-генератор вызвана без скобок или её результат перезаписан списком.

как починить

Создай итератор: it = iter(items), затем next(it). Или просто перебирай через for.

было

items = [1, 2, 3]
print(next(items))

стало

it = iter([1, 2, 3])
print(next(it))

генераторы в справочнике

TypeError: can't multiply sequence by non-int of type 'str'

нельзя умножить последовательность на str

Умножение строки или списка работает только на целое число, а второй операнд типа str.

частые причины

  • Два значения из input() перемножаются как строки.
  • Дробное число умножается на строку.

как починить

Приведи оба операнда к числам: int(a) * int(b).

было

a = input()
b = input()
print(a * b)

стало

a = int(input())
b = int(input())
print(a * b)

преобразование типов в справочнике

TypeError: unhashable type: 'list'

нехешируемый тип: list

Ключом словаря и элементом множества может быть только неизменяемое значение, а list изменяемый.

частые причины

  • Список использован как ключ словаря.
  • Список добавлен в set.

как починить

Замени список на кортеж: (x, y) вместо [x, y].

было

seen = {[1, 2]: "пара"}

стало

seen = {(1, 2): "пара"}

изменяемые и неизменяемые типы

TypeError: 'str' object does not support item assignment

объект типа str не поддерживает присваивание по индексу

Значение типа str нельзя менять по частям: строки и кортежи неизменяемы.

частые причины

  • s[0] = "A" для строки.
  • Изменение элемента кортежа.

как починить

Собери новое значение: s = "A" + s[1:]. Если нужны правки по индексу, работай со списком.

было

s = "привет"
s[0] = "П"

стало

s = "привет"
s = "П" + s[1:]

изменяемые и неизменяемые типы

TypeError

ошибка типа

Операция получила значение не того типа, который она умеет обрабатывать. Текст после двоеточия называет операцию и типы.

частые причины

  • Строка из input() там, где нужно число.
  • None вместо значения: функция без return.
  • Список вместо одиночного значения или наоборот.

как починить

Выведи type() каждого участника операции и приведи типы явно.

TypeError и ValueError в справочнике

AttributeError: 'NoneType' object has no attribute 'append'

у объекта None нет атрибута append

Переменная содержит None, а код зовёт у неё .append. None появляется, когда функция ничего не вернула.

частые причины

  • items = items.sort(): sort сортирует на месте и возвращает None.
  • Своя функция без return.
  • dict.get() не нашёл ключ.

как починить

Не присваивай результат методов, которые меняют объект на месте (sort, append, reverse). Проверь, что функция возвращает значение.

было

items = items.sort()
items.append(4)

стало

items.sort()
items.append(4)

AttributeError в справочнике

AttributeError: module 'math' has no attribute 'sqr'

в модуле math нет атрибута sqr

Модуль math импортирован, но имени sqr в нём нет.

частые причины

  • Опечатка в имени функции модуля.
  • Свой файл назван как библиотека (random.py, math.py) и импортируется вместо неё.

как починить

Проверь имя по документации модуля и переименуй свой файл, если он совпадает с библиотекой.

было

import math
print(math.sqr(16))

стало

import math
print(math.sqrt(16))

AttributeError в справочнике

AttributeError: 'list' object has no attribute 'push'

у объекта типа list нет атрибута push

У значения типа list нет метода или поля push: либо опечатка в имени, либо в переменной не тот тип.

частые причины

  • Метод из другого языка: push, length, size.
  • Опечатка: apend, lenght.
  • Переменная оказалась строкой вместо списка или числом вместо объекта.

как починить

Посмотри доступные методы: print(dir(x)). Для списка добавление это append, длина это len(x).

было

items.push(4)

стало

items.append(4)

AttributeError в справочнике

AttributeError

ошибка атрибута

Код обращается к полю или методу, которого у объекта нет.

частые причины

  • Опечатка в имени метода.
  • Переменная другого типа, чем ожидалось.

как починить

Проверь тип через type(x) и доступные имена через dir(x).

AttributeError в справочнике

Данные: IndexError, KeyError, ValueError, ZeroDivisionError 12

IndexError: list index out of range

индекс за пределами list

Запрошен элемент с номером, которого нет: в list меньше элементов, чем ты думаешь. Нумерация начинается с нуля, последний элемент это len(x) - 1.

частые причины

  • Цикл до len(x) включительно: range(len(x) + 1).
  • Обращение к x[len(x)] вместо x[-1].
  • Коллекция пустая: ввод не пришёл или список ещё не заполнен.
  • Строка ввода короче, чем ожидалось.

как починить

Проверь длину перед обращением и используй x[-1] для последнего элемента.

было

items = [1, 2, 3]
print(items[3])

стало

items = [1, 2, 3]
print(items[-1])

списки в справочнике

IndexError: pop from empty list

pop из пустого списка

pop() вызван у списка, в котором уже нет элементов.

частые причины

  • Цикл извлекает элементы дольше, чем их есть.

как починить

Проверяй if items: перед pop() или используй while items:.

списки в справочнике

IndexError

ошибка индекса

Обращение по номеру, которого в коллекции нет.

частые причины

  • Индекс больше длины минус один.
  • Пустая коллекция.

как починить

Сверь индекс с len(x).

списки в справочнике

KeyError: 'age'

ключ age не найден

В словаре нет ключа age. Python не подставляет значение по умолчанию, а сразу останавливается.

частые причины

  • Опечатка или другой регистр в ключе.
  • Ключ строка, а ищется число: d["1"] и d[1] разные ключи.
  • Ключ ещё не добавлен: счётчик не инициализирован.

как починить

Используй d.get(key, default) или проверь if key in d. Для счётчиков подойдёт collections.Counter или defaultdict.

было

counts = {}
counts["a"] += 1

стало

counts = {}
counts["a"] = counts.get("a", 0) + 1

словари в справочнике

ValueError: invalid literal for int() with base 10: 'abc'

строку «abc» нельзя превратить в целое число

int() получил строку abc, в которой не только цифры.

частые причины

  • Пустая строка: ввод закончился или строка пустая.
  • Дробное число: int("3.5") не работает, нужен float.
  • Пробелы, буквы или единицы измерения в строке.
  • Вся строка ввода вместо одного числа: int("3 4").

как починить

Убери лишнее до преобразования: int(text.strip()), int(float(text)), а для нескольких чисел разбей строку через split().

было

n = int("3.5")

стало

n = int(float("3.5"))

TypeError и ValueError в справочнике

ValueError: could not convert string to float: '3,5'

строку «3,5» нельзя превратить в дробное число

float() не разобрал строку 3,5.

частые причины

  • Запятая вместо точки: 3,5.
  • Пробелы или текст рядом с числом.

как починить

Замени запятую на точку: float(text.replace(",", ".")).

было

x = float("3,5")

стало

x = float("3,5".replace(",", "."))

TypeError и ValueError в справочнике

ValueError: not enough values to unpack (expected 2, got 1)

недостаточно значений для распаковки: ожидалось 2, получено 1

Слева от = 2 имени, а справа коллекция из 1 элементов.

частые причины

  • Строка ввода содержит меньше слов, чем ожидалось.
  • split по не тому разделителю.

как починить

Проверь ввод и разделитель. Если частей может быть меньше, разбирай список по индексам с проверкой длины.

было

a, b = "5".split()

стало

a, b = "5 7".split()

TypeError и ValueError в справочнике

ValueError: too many values to unpack (expected 2)

слишком много значений для распаковки: ожидалось 2

Слева от = 2 имени, а справа элементов больше.

частые причины

  • В строке ввода больше слов, чем переменных.
  • Распаковка строки по символам вместо списка.

как починить

Добавь имя со звёздочкой для остатка: first, *rest = items.

было

a, b = [1, 2, 3]

стало

a, b, *rest = [1, 2, 3]

TypeError и ValueError в справочнике

ValueError: 5 is not in list

значения нет в списке

index() или remove() не нашли элемент в списке.

частые причины

  • Элемент уже удалён или его там не было.
  • Тип не совпадает: ищется "5", а лежит 5.

как починить

Проверь if x in items перед index и remove.

списки в справочнике

ValueError: substring not found

подстрока не найдена

str.index() не нашёл подстроку и остановил программу.

частые причины

  • Подстроки действительно нет в тексте.

как починить

Используй find(), который возвращает -1, или проверь if part in text.

было

pos = text.index("@")

стало

pos = text.find("@")
if pos == -1:
    print("нет @")

методы строк в справочнике

ValueError

ошибка значения

Тип подходит, а само значение нет: функция не может с ним работать.

частые причины

  • Строка не того формата для преобразования.
  • Число вне допустимого диапазона.

как починить

Проверь значение перед вызовом или оберни вызов в try/except ValueError.

TypeError и ValueError в справочнике

ZeroDivisionError: division by zero

деление на ноль

Делитель оказался нулём. Чаще всего это не ошибка арифметики, а пустые данные.

частые причины

  • Среднее по пустому списку: sum(x) / len(x) при len(x) == 0.
  • Счётчик не увеличили в цикле.
  • Процент от нуля.

как починить

Проверь делитель до деления: avg = sum(x) / len(x) if x else 0.

было

avg = sum(scores) / len(scores)

стало

avg = sum(scores) / len(scores) if scores else 0

try/except в справочнике

Окружение: ввод, импорт, файлы, рекурсия 9

EOFError: EOF when reading a line

конец ввода при чтении строки

Программа вызвала input(), а строк ввода больше нет. В задачах с автопроверкой ввод заканчивается ровно там, где его описывает условие.

частые причины

  • input() вызван больше раз, чем строк в условии.
  • Лишний input() для «нажми Enter».
  • В песочнице без панели ввода input() читать нечего.

как починить

Читай ровно столько строк, сколько даёт условие. Несколько чисел в одной строке разбирай через split().

было

a = int(input())
b = int(input())

стало

a, b = map(int, input().split())

песочница Python с панелью ввода

RecursionError: maximum recursion depth exceeded

превышена максимальная глубина рекурсии

Функция вызывает сама себя без остановки: нет базового случая или он недостижим.

частые причины

  • Рекурсивная функция без условия выхода.
  • Аргумент в рекурсивном вызове не уменьшается.
  • Функция случайно названа как встроенная и вызывает себя.

как починить

Добавь условие выхода в начале функции и убедись, что каждый вызов приближает к нему.

было

def fact(n):
    return n * fact(n - 1)

стало

def fact(n):
    if n <= 1:
        return 1
    return n * fact(n - 1)

функции в справочнике

ModuleNotFoundError: No module named 'requests'

модуль requests не найден

Python не нашёл модуль requests: он не установлен в этом окружении или имя написано с ошибкой.

частые причины

  • Библиотека не установлена: pip install requests.
  • Установлена в другое окружение, не то, из которого запускается код.
  • Опечатка в имени модуля.
  • В песочнице и тренажёре Koddo доступна только стандартная библиотека.

как починить

Установи модуль в текущее окружение или проверь имя. Сторонние пакеты в браузерной песочнице не работают.

ModuleNotFoundError в справочнике

ImportError: cannot import name 'helper' from 'utils'

нельзя импортировать helper из utils

Модуль utils найден, но имени helper в нём нет.

частые причины

  • Опечатка в имени функции.
  • Свой файл назван как библиотека и импортируется вместо неё.
  • Два модуля импортируют друг друга по кругу.

как починить

Проверь имя в модуле, переименуй файл-тёзку и разорви циклический импорт.

ImportError в справочнике

ImportError

ошибка импорта

Модуль найден, но импортировать из него нужное не удалось.

частые причины

  • Неверное имя.
  • Циклический импорт.

как починить

Проверь имя и порядок импортов.

ImportError в справочнике

FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'

нет такого файла или папки: data.txt

Файл data.txt не найден по этому пути. Относительный путь считается от папки, из которой запущена программа, а не от папки скрипта.

частые причины

  • Файл лежит в другой папке.
  • Опечатка в имени или расширении.
  • Программа запущена из другой рабочей папки.

как починить

Проверь путь через os.getcwd() или собери его от папки скрипта: Path(__file__).parent / "data.txt".

работа с файлами в справочнике

KeyboardInterrupt

прерывание с клавиатуры

Программу остановили снаружи: Ctrl+C в терминале или остановка в редакторе. Это не ошибка в коде.

частые причины

  • Ты сам прервал выполнение.
  • Программа зависла в бесконечном цикле или ждала ввода, и её остановили.

как починить

Если прерывать пришлось из-за зависания, найди цикл без выхода или лишний input().

циклы в справочнике

StopIteration

итератор исчерпан

next() вызван у итератора, в котором элементы закончились.

частые причины

  • next() вызывается чаще, чем есть элементов.
  • Генератор уже пройден до конца.

как починить

Передай значение по умолчанию: next(it, None), или перебирай через for.

генераторы в справочнике

AssertionError

проверка не прошла

assert получил ложное условие. В задачах с автопроверкой так выглядит тест, который сравнил твой результат с ожидаемым и не сошёлся.

частые причины

  • Функция возвращает не то значение или не тот тип.
  • Лишний print вместо return.
  • Крайний случай: пустой ввод, ноль, отрицательное число.

как починить

Прочитай, какие значения сравнивал тест, и вызови свою функцию с ними вручную.

try/except в справочнике

Как читать трейсбек

  1. Читай снизу вверх: последняя строка называет ошибку и объясняет её текстом.
  2. Строка выше с File "...", line N показывает, где Python остановился. Для SyntaxError причина часто на строке выше указанной.
  3. Стрелка ^ под кодом отмечает место, где разбор сломался.

Как работает расшифровщик

Берёт последнюю строку с именем ошибки, сверяет текст со словарём из 82 сообщений и подставляет имена из твоего трейсбека в объяснение. Словарь собран по реальным ошибкам из тренажёра Koddo.

Если точного сообщения в словаре нет, покажет разбор семейства ошибки. Сторонние библиотеки и их собственные исключения не разбирает.

Преподавателям

У каждой ошибки в каталоге постоянная ссылка: кнопка «ссылка» копирует адрес с якорем. Можно давать её в ответ на вопрос ученика или вставлять в материалы курса.

Страница не требует регистрации и не отправляет код ученика на сервер.

Дальше