Что означает ошибка TypeError: can only concatenate str (not "int") to str

Что означает ошибка TypeError: can only concatenate str (not "int") to str

Это значит, что вы пытаетесь сложить строки с числами

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

Один из фрагментов его кода после перевода в Python выглядит так:

# зарплата в месяц
month = 14200
# плата за ЖКХ
regular_cost = 5800

# функция, которая считает и возвращает долю ЖКХ в бюджете
def calculate(budget,base):
    message = 'На коммунальные платежи уходит ' + base + 'р. - это ' + base/budget*100 + ' процентов от ежемесячного бюджета'
    return message
    
# отправляем в функцию переменные и выводим результат на экран
print(calculate(month,regular_cost))

Но после запуска программист получает ошибку:

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

Странно, но в JavaScript всё работало, почему же здесь код сломался?

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

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

Что делать с ошибкой TypeError: can only concatenate str (not "int") to str

Раз это проблема строгой типизации, то для исправления этой ошибки нужно просто привести все части к одному типу. 

В нашем случае мы хотим получить на выходе строку, поэтому все слагаемые должны быть строкового типа. Но base и base/budget*100 — это числа, поэтому просто так их сложить со строками не получится. Чтобы выйти из ситуации, явно преобразуем их в строки командой str():

message = 'На коммунальные платежи уходит ' + str(base) + 'р. - это ' + str(base/budget*100) + ' процентов от ежемесячного бюджета'

Команда str() делает так, что всё внутри неё приводится к строке и она отдаёт дальше строку. В итоге операция склейки строк проходит как ожидаемо: строка к строке даёт строку. Нет повода для беспокойства. 

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Алина Грызлова

Любишь Python? Зарабатывай на нём!
Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.
Попробовать
Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Красивый проект с трёхмерной графикой в браузере
Красивый проект с трёхмерной графикой в браузере

Вращаем Луну вокруг Земли

medium
Что означает ошибка: TypeError: ‘undefined’ is not an object
Что означает ошибка: TypeError: ‘undefined’ is not an object

Это значит, что браузер не может найти нужный объект.

easy
Одной строкой: новые CSS-команды для фронтендов
Одной строкой: новые CSS-команды для фронтендов

Что можно сделать в современном вебе.

medium
Как быстро найти любой логарифм с помощью обычного цикла
Как быстро найти любой логарифм с помощью обычного цикла

Пишем простой код на Python

easy
Прокачиваем собственный генератор паролей

Тройная защита для вашей семьи!

hard
Задачка с собеседования: как перевести число в римскую систему счисления и обратно
Задачка с собеседования: как перевести число в римскую систему счисления и обратно

Простая задача с приятным решением

easy
UX-тест простого калькулятора на JavaScript
UX-тест простого калькулятора на JavaScript

Что скажут UX-тестировщики про наш проект

easy
Делаем сами: адаптивный сайт

С котиками!

medium
Что нужно поставить на компьютер, чтобы делать сайты
Что нужно поставить на компьютер, чтобы делать сайты

Устанавливаем MAMP за 10 минут

medium
Проект: эффектно переключаем картинки на странице
Проект: эффектно переключаем картинки на странице

Как в бумажном журнале

easy
easy