ValueError: invalid literal for int() with base 10 — почему int() падает?
Считываю число через int(input()), а программа падает с ValueError: invalid literal for int() with base 10. Я же ввожу число! Что не так с int() и как обработать такую ошибку?
2 ответа
Эта ошибка значит: в int() попало то, что не является целым числом. Функция показывает «бракованную» строку в кавычках — посмотрите на неё.
Частые причины:
- Лишние символы или пробелы, дробная точка, запятая:
int("3.14") # ValueError — это дробь, а не целое
int("12 ") # пробелы — обычно ок, .strip() надёжнее
int("1,000") # запятая не понимается
int("abc") # вообще не число
-
Пустая строка — пользователь нажал Enter, ничего не введя:
int("")→ ошибка. -
Текст вроде
"пять"или число с буквами.
Что делать:
- Для дробей берите
float():
x = float("3.14") # 3.14
- Уберите пробелы:
int(input().strip()). - Защититесь через
try/except:
try:
n = int(input("Число: "))
except ValueError:
print("Это не целое число, попробуйте снова")
Главное — int() принимает только строки, где одни цифры (можно с минусом). Всё остальное — ValueError.
Подсказка для отладки: выведите то, что приходит, через repr: print(repr(s)). Так вы увидите скрытые пробелы, перевод строки \n или символ, который мешает. Часто оказывается, что в строке притаился \ufeff (BOM) или пробел — int() их не прощает.