SkillPy

TypeError: can only concatenate str (not int) в Python

Время чтения8 мин чтения
Опубликовано7 сентября 2026 г.
Легко
Python
Ошибки
Типы данных
Начинающим
TypeError: can only concatenate str (not int) в Python

Ошибка TypeError: can only concatenate str (not "int") to str в Python возникает, когда ты пытаешься сложить строку и число через +. Python не складывает разные типы неявно — и это не каприз, а защита от скрытых багов. Разберём, почему так, и как правильно объединить текст с числом.

Коротко

Нельзя писать "Тебе " + age, если age — число. Правильно — f-строка: f"Тебе {age} лет". Она сама подставит число в текст. Второй вариант — вручную превратить число в строку: "Тебе " + str(age) + " лет".

Почему возникает ошибка

Оператор + в Python значит разное для разных типов: для строк это склейка ("a" + "b" → "ab"), для чисел — сложение (2 + 3 → 5). Когда слева строка, а справа число, Python не знает, что ты имел в виду, и не угадывает — вместо этого честно сообщает об ошибке. В отличие от JavaScript, который молча склеил бы всё в строку и часто давал бы неожиданный результат.

age = 25
print("Тебе " + age + " лет")

Ошибка выполнения — main.py, строка 2

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

Текст ошибки читается прямо: «можно склеивать только строку со строкой, а не с int». Проблема — в + age, где age число. Про типы данных и почему Python строг к ним — в гайде Типы данных в Python: полный гайд для начинающих.

Как исправить: f-строка

Лучший способ вставить число в текст — f-строка. Никаких + и преобразований: значение подставляется прямо в фигурные скобки.

age = 25
print(f"Тебе {age} лет")
Тебе 25 лет

Если по какой-то причине f-строка не подходит, число можно превратить в строку явно через str(): "Тебе " + str(age) + " лет". Но f-строка короче и читаемее — подробнее в гайде f-строки в Python: форматирование строк просто и читаемо.

Где та же ошибка встретится снова

Чаще всего эта ошибка вылезает в трёх местах: при сборке сообщения в print, при склейке результата с числом и — особенно — при работе с input(). Помни, что input() всегда возвращает строку: пиши int(input(...)), если планируешь считать. Обратная ситуация — сложить число со строкой из ввода — даст ту же TypeError.

Когда str(), а когда f-строка

Для вставки значений в текст почти всегда лучше f-строка — она читаемее и не захламляет код вызовами str(). Явный str(x) оправдан, когда нужно именно преобразование числа в строку как отдельный шаг (например, перед join() списка чисел). Смешивать текст и числа через + не стоит вообще.

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

Что значит can only concatenate str (not int) to str?

Что оператор + со строкой ждёт справа тоже строку, а получил число (int). Python не приводит типы автоматически, поэтому склейка строки и числа через + невозможна.

Как вывести число внутри текста?

Через f-строку: f"Всего {count} штук". Число подставится в текст автоматически, без + и без str().

Почему в JavaScript так можно, а в Python нет?

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

Кот-наставник

— Запомни: + не дружит с разными типами. Строка со строкой — склейка, число с числом — сумма, а вместе — TypeError.

— Хочешь текст с числом? Бери f-строку: f"..{значение}..". Это и короче, и без сюрпризов.

Ошибки типов понятнее на практике

На SkillPy ты пишешь код сам, а AI-наставник ловит TypeError в безопасной среде и показывает, где строка встретилась с числом. Он понимает твоё решение, а не сверяет с шаблоном.