Справочник · ошибки 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)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)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()TypeError: hello() missing 1 required positional argument: 'name'
- Что случилось
- Функции
helloне передали значение для'name'. - Почему так бывает
- Сколько параметров записано в скобках при def, столько значений нужно при вызове.
- Как исправить
- Добавь недостающие значения в скобки при вызове.
Разбираем в уроке 5.2 «Параметры».
Лишнее значение
def hello(name):
print("Привет,", name)
hello("Аня", "Макс")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] = 10TypeError: '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] = "Т"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 «Принимаем данные».
Другие ошибки
SyntaxErrorNameErrorAttributeErrorIndentationErrorTabErrorValueErrorZeroDivisionErrorIndexErrorKeyErrorUnboundLocalErrorRecursionErrorFileNotFoundErrorUnsupportedOperationUnicodeDecodeErrorModuleNotFoundErrorJSONDecodeErrorEOFErrorAssertionErrorValidationErrorMissingSchemaConnectionErrorReadTimeoutHTTPErrorOperationalErrorIntegrityErrorProgrammingErrorNotImplementedError