← Все вопросы

TypeError: '<' not supported between instances of 'int' and 'str' — почему нельзя сравнить число и строку?

Задан 2 месяца назад764 просмотров2 ответа
9

Сравниваю введённое число с порогом if x > 10:, а вылетает TypeError: '>' not supported between instances of 'str' and 'int'. Почему Python не может сравнить число и строку и как это починить?

2 ответа

13
✓ Принятый ответ — помог автору

Ошибка значит: вы сравниваете строку с числом через <, >, <=, >=, а Python не знает, как их упорядочить — это разные типы. Чаще всего одна из сторон — строка из input(), потому что input() всегда возвращает строку, даже если вы ввели цифры.

Ошибка:

x = input("Введите число: ")   # x это строка, например "15"
if x > 10:                      # TypeError: str и int
    print("больше")

Исправление — привести ввод к числу:

x = int(input("Введите число: "))   # теперь x это int
if x > 10:
    print("больше")

Для дробных используйте float(input()).

Частые причины:

  1. Забыли int()/float() вокруг input().
  2. Сравниваете число из вычислений со строкой из словаря/файла (данные из файла тоже приходят строками).
  3. Перепутали элементы списка, где смешаны числа и строки.

Важно: оператор равенства == между разными типами не падает, а просто даёт False ("15" == 15 это False). А вот операторы порядка <, > именно ошибку и кидают. Поэтому если у вас сравнение «больше/меньше» с вводом — почти наверняка нужно обернуть ввод в int().

5

Быстрая проверка: выведите тип перед сравнением — print(type(x)). Если там <class 'str'>, а вы ждали число, значит где-то потерялся int()/float(). Помните: данные из input(), из файла (f.read()) и из CSV приходят строками, и их нужно преобразовывать перед арифметикой и сравнением по величине.

Ваш ответ

Войдите, чтобы ответить на вопрос.