← Все вопросы

ValueError: invalid literal for int() with base 10 — почему int() падает?

Задан 6 месяцев назад801 просмотров2 ответа
10

Считываю число через int(input()), а программа падает с ValueError: invalid literal for int() with base 10. Я же ввожу число! Что не так с int() и как обработать такую ошибку?

2 ответа

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

Эта ошибка значит: в int() попало то, что не является целым числом. Функция показывает «бракованную» строку в кавычках — посмотрите на неё.

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

  1. Лишние символы или пробелы, дробная точка, запятая:
int("3.14")   # ValueError — это дробь, а не целое
int("12 ")     # пробелы — обычно ок, .strip() надёжнее
int("1,000")   # запятая не понимается
int("abc")     # вообще не число
  1. Пустая строка — пользователь нажал Enter, ничего не введя: int("") → ошибка.

  2. Текст вроде "пять" или число с буквами.

Что делать:

  • Для дробей берите float():
x = float("3.14")   # 3.14
  • Уберите пробелы: int(input().strip()).
  • Защититесь через try/except:
try:
    n = int(input("Число: "))
except ValueError:
    print("Это не целое число, попробуйте снова")

Главное — int() принимает только строки, где одни цифры (можно с минусом). Всё остальное — ValueError.

4

Подсказка для отладки: выведите то, что приходит, через repr: print(repr(s)). Так вы увидите скрытые пробелы, перевод строки \n или символ, который мешает. Часто оказывается, что в строке притаился \ufeff (BOM) или пробел — int() их не прощает.

Ваш ответ

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