Что означает ошибка TypeError: can't multiply sequence by non-int of type 'str'
easy

Что означает ошибка TypeError: can't multiply sequence by non-int of type 'str'

Очередная ошибка про несовместимость типов данных

Ситуация: мы пишем простой код на Python, который запрашивает у пользователя два числа, а нам нужно их перемножить между собой. Мы знаем, что для ввода данных в Python используется команда input() — она выводит текст и ждёт, пока пользователь что-то напишет. Наша задача — взять эти числа и вывести результат:

# запрашиваем первое число
a = input('Введите первое число: ')
# потом второе
b = input('Введите второе число: ')
# выводим результат умножения
print('Произведение этих чисел равно ' + a * b)

При запуске компьютер выдаёт ошибку:

❌ TypeError: can't multiply sequence by non-int of type 'str'

Очень странно, ведь мы точно сделали всё как нужно и ввели целые числа.

Что это значит: интерпретатор сообщает, что он не может перемножить между собой строки, потому что это не числа и непонятно, как это можно умножать.

Когда встречается: когда компьютер пытается перемножить переменные, в которых нет ни одного числа. Он умеет умножать строки на число (и тогда получается одна и та же строка много раз), но если обе переменные — строки, то компьютер теряется и выдаёт ошибку.

Что делать с ошибкой TypeError: can't multiply sequence by non-int of type 'str'

В нашем коде вся проблема в том, что результат ввода мы получаем в виде строк, а не в виде чисел. Даже если мы введём число 10, то Python это запомнит как '10', то есть как строку. Это особенность команды input() — она все ответы воспринимает как строки.

Чтобы избавиться от этой ошибки, нам нужно принудительно перевести строки в числа с помощью команды int():

# запрашиваем первое число
a = input('Введите первое число: ')
# потом второе
b = input('Введите второе число: ')
# выводим результат умножения
print('Произведение этих чисел равно ' + int(a) * int(b))

Но если мы запустим сейчас этот код, то получим новую ошибку, которую мы уже разбирали — TypeError: can only concatenate str (not "int") to str. Она означает, что мы пытаемся соединять строки с числами, а нужно — тоже со строками. Для этого используем команду str() — она преобразует результат произведения чисел обратно в строку.

Теперь всё в порядке и работает так:

  1. Мы запрашиваем у пользователя числа и сохраняем их как строку.
  2. Командой int() мы переводим их в числовой вид, чтобы перемножить друг с другом.
  3. Командой str() переводим результат умножения обратно в строку, чтобы можно было вывести результат вместе с поясняющей фразой.

# запрашиваем первое число
a = input('Введите первое число: ')
# потом второе
b = input('Введите второе число: ')
# выводим результат умножения
print('Произведение этих чисел равно ' + str(int(a) * int(b)))

Текст:

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

Редактор:

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

Художник:

Алексей Сухов

Корректор:

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

Вёрстка:

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

Соцсети:

Виталий Вебер

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