Python LinuxWindowsmacOS

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

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Складываются значения несовместимых типов. Приведите типы через int(), str() или используйте f-строки.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Чтение сообщения
  5. Типичные причины
  6. Профилактика

#Что означает ошибка

Сообщение
unsupported operand type

TypeError: unsupported operand type(s) for +: 'int' and 'str' значит, что операция применена к несовместимым типам. Python не приводит типы автоматически: нельзя сложить число и строку, сравнить None с числом или умножить список на дробь.

В сообщении указаны оператор и оба типа — это ключ к решению.

Определите источник значения неправильного типа.

Складываются значения несовместимых типов. Приведите типы через int(), str() или используйте f-строки.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Число и строкаinput.Числовое значение получено из формы или input как strПроверьте ввод, затем int/float для арифметики.
None в выраженииПустое.Код ожидает склеивание текста, но получает intИспользуйте str() или f-строку.
Список и числоТипы.Одна ветка изменила тип значенияВключите проверку типов и тесты входных данных.
Данные из файлаСтроки.Значение неожиданно None — отдельный тип ошибкиПроверьте return и методы, изменяющие объект на месте.

#Пошаговое решение

  1. Прочитайте типы в сообщенииНайдите в последней строке traceback типы операндов, например unsupported operand type(s) for +: 'int' and 'str'. В редакторе откройте строку из стека и выделите обе стороны оператора +. Для int + str Python не может догадаться, требуется ли математическое сложение или склеивание текста. Если сообщение содержит другую пару типов, выясните правила именно этих типов, не применяйте преобразование из примера вслепую.
  2. Выведите значения и типыВ своём отладочном окружении перед выражением добавьте print(repr(left), type(left), repr(right), type(right)), подставив имена настоящих переменных; затем запустите скрипт с теми же входными данными. Запишите значения и типы, избегая вывода паролей и персональных сведений. Если строка пришла из input(), формы или CSV, это объясняет, почему число записано как str. Уберите отладочный вывод после проверки.
  3. Найдите источник NoneЕсли в сообщении об ошибке фигурирует NoneType, это отдельный сценарий, а не причина именно для int + str. Проверьте, не присвоили ли переменной результат функции без return или метода, возвращающего None (list.sort, list.append). Прочитайте сигнатуру функции, исправьте источник значения и добавьте тест. Если оба операнда действительно int и str, этот шаг пропустите — искать None не требуется.
  4. Приведите типы явноВыберите действие по смыслу. Для арифметики преобразуйте проверенную строку: total = count + int(text) (строка должна состоять из целого числа; возможен ValueError). Для текста используйте message = str(count) + text либо f'{count}{text}'. Если данные могут содержать пустоту, пробелы или разделители, сначала проверьте формат и обработайте исключение, не заменяйте все ошибки на ноль автоматически. Повторите проблемное действие на нескольких входах.
  5. Подключите mypyЕсли ошибка повторяется в большом проекте, используйте аннотации и статический анализ: в виртуальном окружении проекта выполните python -m pip install mypy, затем python -m mypy путь/к/модулю.py, заменив путь своим. Перед установкой проверьте политику зависимостей проекта; mypy может не обнаружить проблему, если значения имеют тип Any. Добавьте автоматические тесты для пустого, числового и строкового ввода, чтобы несовместимые типы не возвращались после правок.

#Чтение сообщения

Фрагмент for +: 'int' and 'NoneType' означает, что одно значение равно None — чаще всего функция ничего не вернула (забыт return) или метод изменяет объект на месте (list.sort() возвращает None). Выведите типы: print(type(a), type(b), a, b). Используйте отладчик или breakpoint() перед строкой с ошибкой.

#Типичные причины

input() возвращает строку: age = int(input()). Данные из CSV/JSON/HTML приходят строками, числа нужно преобразовать int()/float(). Конкатенация строки и числа: используйте f-строки f"Итого: {total}". Значение None из dict.get() или функции без return: задайте значение по умолчанию d.get("x", 0). Сравнение str и int в условиях.

#Профилактика

Добавьте аннотации типов и запустите mypy или Pyright: они находят такие ошибки до запуска. Проверяйте вход функций (isinstance). Используйте Decimal для денег. При разборе пользовательских данных оборачивайте приведение типов в try/except ValueError. Для pandas приведите столбцы: df["price"] = pd.to_numeric(df["price"], errors="coerce").

PythonКоманда
Пример диагностики типов и корректного приведения.
a, b = 5, input("Число: ")
print(type(a), type(b))
total = a + int(b)
print(f"Итого: {total}")

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.