TypeError: '<' not supported between instances of 'int' and 'str' — почему нельзя сравнить число и строку?
Сравниваю введённое число с порогом if x > 10:, а вылетает TypeError: '>' not supported between instances of 'str' and 'int'. Почему Python не может сравнить число и строку и как это починить?
2 ответа
Ошибка значит: вы сравниваете строку с числом через <, >, <=, >=, а 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()).
Частые причины:
- Забыли
int()/float()вокругinput(). - Сравниваете число из вычислений со строкой из словаря/файла (данные из файла тоже приходят строками).
- Перепутали элементы списка, где смешаны числа и строки.
Важно: оператор равенства == между разными типами не падает, а просто даёт False ("15" == 15 это False). А вот операторы порядка <, > именно ошибку и кидают. Поэтому если у вас сравнение «больше/меньше» с вводом — почти наверняка нужно обернуть ввод в int().
Быстрая проверка: выведите тип перед сравнением — print(type(x)). Если там <class 'str'>, а вы ждали число, значит где-то потерялся int()/float(). Помните: данные из input(), из файла (f.read()) и из CSV приходят строками, и их нужно преобразовывать перед арифметикой и сравнением по величине.