Справочник · ошибки Python

TypeError

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

Python пишет ошибку в последней строке сообщения: сначала название, после двоеточия — подробности. Найди своё сообщение ниже — рядом объяснение простыми словами и что исправить.

Внутри print нельзя класть значение

TypeError: print() got an unexpected keyword argument
Что случилось
В скобках print стоит имя = значение. Это не сравнение.
Почему так бывает
Один знак = кладёт значение в переменную. Чтобы сравнить, нужны два знака ==.
Как исправить
Замени = на ==.

Разбираем в уроке 2.1 «Сравниваем».

Сравнивается «ничего»

TypeError: '<' not supported between instances of 'str' and 'int'
Что случилось
Одно из сравниваемых значений — None, то есть «ничего».
Почему так бывает
Так бывает, когда функция печатает ответ вместо return. Вместо числа остаётся None.
Как исправить
Проверь, что функция отдаёт ответ через return.

Разбираем в уроке 5.3 «Вернуть ответ».

Число с текстом не сравнить

TypeError: '<' not supported between instances of 'str' and 'int'
Что случилось
Python не знает, как сравнить str и int.
Почему так бывает
Часто причина в том, что input() всегда возвращает текст, даже если человек написал цифры.
Как исправить
Преврати текст в число: int(input()).

Разбираем в уроке 2.1 «Сравниваем».

У input нет скобок

TypeError: can only concatenate str (not "builtin_function_or_method") to str
Что случилось
Ты написал input без скобок, и Python не спросил человека.
Почему так бывает
Без скобок input — это сама команда, а не ответ человека. Скобки запускают её.
Как исправить
Напиши input() со скобками.

Разбираем в уроке 1.3 «Спроси человека».

С текстом нельзя считать

TypeError: unsupported operand type(s) for -: 'str' and 'str'
Что случилось
Python пробует считать с текстом, а не с числом.
Почему так бывает
Часто причина в том, что input() всегда возвращает текст, даже если человек написал цифры.
Как исправить
Преврати текст в число: int(input()).

Разбираем в уроке 1.5 «Число и текст — превращения».

Текст на текст не умножить

TypeError: can't multiply sequence by non-int of type 'str'
Что случилось
Ты умножаешь текст на текст.
Почему так бывает
Умножать можно текст на число, но не на другой текст. Часто это ответ input(), который остался текстом.
Как исправить
Преврати текст в число: int(input()).

Разбираем в уроке 1.5 «Число и текст — превращения».

К тексту прибавили «ничего»

TypeError: can only concatenate str (not "NoneType") to str
Что случилось
К тексту прибавляют None, то есть «ничего».
Почему так бывает
Часто функция печатает ответ вместо return. Или переменной окружения нет: тогда os.getenv возвращает None.
Как исправить
Проверь, что функция отдаёт значение через return. Для os.getenv проверь имя переменной и вызов load_dotenv().

Разбираем в уроке 5.3 «Вернуть ответ».

Текст плюс число

age = input("Сколько тебе лет? ")
print(age + 1)
Python сообщает об ошибке
TypeError: can only concatenate str (not "int") to str
Что случилось
Нельзя склеить текст и число.
Почему так бывает
Плюс склеивает только текст с текстом. Часто причина в том, что input() всегда возвращает текст.
Как исправить
Хочешь посчитать — преврати текст в число через int(). Хочешь склеить — преврати число в текст через str().

Разбираем в уроке 1.5 «Число и текст — превращения».

Число плюс текст

TypeError: unsupported operand type(s) for +: 'int' and 'str'
Что случилось
Ты складываешь число и текст.
Почему так бывает
Часто причина в том, что input() всегда возвращает текст.
Как исправить
Преврати текст в число через int().

Разбираем в уроке 1.5 «Число и текст — превращения».

Степень — две звёздочки

TypeError: unsupported operand type(s) for ^
Что случилось
Знак ^ в Python не возводит в степень.
Почему так бывает
Для степени нужны две звёздочки подряд: 2 ** 3.
Как исправить
Замени ^ на **.

Разбираем в уроке 1.6 «Деление с остатком».

Скобки не там

TypeError: 'int' object is not callable
Что случилось
Скобки стоят после значения, которое нельзя вызвать.
Почему так бывает
Или переменная названа именем функции, например sum.
Как исправить
Переименуй переменную или убери лишние скобки.

Разбираем в уроке 4.3 «Список в цикле».

Забыт self

class Cat:
    def __init__(name, age):
        self.name = name

cat = Cat("Бит", 3)
Python сообщает об ошибке
TypeError: Cat.__init__() takes 2 positional arguments but 3 were given
Что случилось
Метод Cat.__init__ ждёт значений: 2, а ему передали 3.
Почему так бывает
Python сам передаёт методу объект первым значением. Для него в def должен стоять параметр self. Скорее всего, self забыт.
Как исправить
Поставь self первым параметром метода: def имя(self, ...).

Разбираем в уроке 9.2 «Свой класс».

Не хватает значений

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

hello()
Python сообщает об ошибке
TypeError: hello() missing 1 required positional argument: 'name'
Что случилось
Функции hello не передали значение для 'name'.
Почему так бывает
Сколько параметров записано в скобках при def, столько значений нужно при вызове.
Как исправить
Добавь недостающие значения в скобки при вызове.

Разбираем в уроке 5.2 «Параметры».

Лишнее значение

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

hello("Аня", "Макс")
Python сообщает об ошибке
TypeError: hello() takes 1 positional argument but 2 were given
Что случилось
Функция hello ждёт значений: 1, а ей передали 2.
Почему так бывает
Значений в скобках при вызове должно быть столько, сколько параметров у функции.
Как исправить
Убери лишнее значение или добавь параметр при def.

Разбираем в уроке 5.2 «Параметры».

Такого параметра нет

TypeError: greet() got an unexpected keyword argument 'nmae'
Что случилось
У функции greet нет параметра с именем nmae.
Почему так бывает
Имя перед знаком равно должно совпадать с именем параметра при def. Возможно, опечатка.
Как исправить
Сверь имя с тем, что записано в скобках при def.

Разбираем в уроке 5.2 «Параметры».

Значение передано два раза

TypeError: greet() got multiple values for argument 'name'
Что случилось
Параметру name передали значение дважды.
Почему так бывает
Одно значение пришло по порядку, а другое по имени.
Как исправить
Оставь для этого параметра одно значение.

Разбираем в уроке 5.2 «Параметры».

Функции не дали значения

TypeError: len() takes exactly one argument (0 given)
Что случилось
Функция len запущена без значения.
Почему так бывает
Скобки после имени запускают функцию сразу. Когда имя передают в key, скобки не нужны: sorted сам вызовет функцию для каждого слова.
Как исправить
Убери скобки: key=len, а не key=len().

Разбираем в уроке 5.6 «Любое число значений».

Здесь оказалось «ничего»

TypeError: … NoneType
Что случилось
Здесь оказалось None, то есть «ничего».
Почему так бывает
Часто функция печатает результат вместо return, или написано lst = lst.append(x).
Как исправить
Проверь, что функция возвращает значение через return.

Разбираем в уроке 4.2 «Меняем список».

Нечего раскладывать

TypeError: cannot unpack non-iterable int object
Что случилось
Значение типа int нельзя разложить на две переменные.
Почему так бывает
Метод values даёт только значения, без ключей. Пару «ключ и значение» даёт метод items.
Как исправить
Пиши for ключ, значение in словарь.items().

Разбираем в уроке 6.2 «Обход словаря».

Кортеж менять нельзя

point = (3, 5)
point[0] = 10
Python сообщает об ошибке
TypeError: 'tuple' object does not support item assignment
Что случилось
Элемент кортежа заменить нельзя.
Почему так бывает
Кортеж не меняется после создания. В этом его смысл: значения внутри в безопасности.
Как исправить
Собери новый кортеж или возьми список, если данные должны меняться.

Разбираем в уроке 6.3 «Кортежи и множества».

У множества нет номеров

TypeError: 'set' object is not subscriptable
Что случилось
Множество нельзя читать по номеру.
Почему так бывает
В множестве нет порядка, поэтому нет и номеров.
Как исправить
Проверяй значение через in или пройди по множеству циклом.

Разбираем в уроке 6.3 «Кортежи и множества».

Знак работает с множествами

TypeError: unsupported operand type(s) for &: 'list' and 'list'
Что случилось
Знак & не работает со списками.
Почему так бывает
Знаки | и & и - — это действия над множествами. Список сначала нужно превратить в множество.
Как исправить
Оберни список командой set(...).

Разбираем в уроке 6.3 «Кортежи и множества».

Букву в тексте менять нельзя

word = "кот"
word[0] = "Т"
Python сообщает об ошибке
TypeError: 'str' object does not support item assignment
Что случилось
Текст нельзя менять по одной букве.
Почему так бывает
В отличие от списка, текст на месте не меняется.
Как исправить
Собери новый текст: склей нужные куски срезами, например "Т" + word[1:].

Разбираем в уроке 4.6 «Копии списков».

Склеивать нечего

TypeError: can only join an iterable
Что случилось
Метод join получил не список слов, а None, то есть «ничего».
Почему так бывает
Методы reverse и sort меняют список на месте и ничего не возвращают.
Как исправить
Возьми срез words[::-1] или команду sorted(words): они отдают новый список.

Разбираем в уроке 4.5 «Методы текста».

У super нет скобок

TypeError: descriptor '1' requires a 'super' object
Что случилось
После super забыты скобки.
Почему так бывает
Команду super вызывают со скобками, как функцию: super().
Как исправить
Напиши super().__init__(...).

Разбираем в уроке 9.5 «Наследование».

Поля модели передают по имени

TypeError: BaseModel.__init__() takes 1 positional argument but 1 was given
Что случилось
Значения полей модели нельзя передавать по порядку.
Почему так бывает
В модели Pydantic каждое значение подписано названием поля.
Как исправить
Пиши так: Item(name="чай", price=90). Название поля, знак равно, значение.

Разбираем в уроке 15.3 «Принимаем данные».

Ответ — не словарь

TypeError: 'Response' object is not subscriptable
Что случилось
К ответу сервера обращаются как к словарю.
Почему так бывает
Объект ответа хранит код, заголовки и текст. Данные лежат внутри, и их достают методом json().
Как исправить
Сначала напиши data = r.json(), а потом data["ключ"].

Разбираем в уроке 13.2 «Просим данные».

Бланк — не словарь

TypeError: 'User' object is not subscriptable
Что случилось
Объект User нельзя читать по ключу в квадратных скобках.
Почему так бывает
Бланк Pydantic хранит поля как атрибуты объекта, а не как ключи словаря.
Как исправить
Обращайся к полю через точку: note.text вместо note["text"].

Разбираем в уроке 15.3 «Принимаем данные».

Другие ошибки