SkillPy

ValueError: invalid literal for int() — как исправить?

Время чтения10 мин чтения
Опубликовано17 октября 2026 г.
Легко
Python
Ошибки
Типы данных
Начинающим
ValueError: invalid literal for int() — как исправить?

Ошибка ValueError: invalid literal for int() with base 10 в Python означает: функция int() получила строку, из которой невозможно собрать целое число. Строка-виновница показана в кавычках в конце сообщения. Чаще всего ошибка возникает при int(input()), когда пользователь вводит текст вместо числа, — и это предусмотренная ситуация, которую стоит обрабатывать, а не только исправлять в коде.

Коротко: как исправить invalid literal for int()?

  • Прочитай строку в кавычках в конце traceback — это значение, которое не удалось преобразовать.
  • Если там дробь вроде "3.5" — сначала float(), а результат уже в int().
  • Если там пустая строка — проверь, что ввод не пустой, до преобразования.
  • Если внутри числа пробел вроде "10 000" — убери его, например через .replace(" ", "").
  • Если ввод делает пользователь — оберни преобразование в try/except ValueError.
Кот-наставник

— ValueError не жалуется на сам язык: он показывает, что данные и операция не сошлись. int() честно называет строку, которую не смог прочитать, — начинай диагностику с неё.

Что означает invalid literal for int()?

ValueError — исключение о неверном значении. Тип у данных правильный (это строка), но содержимое не подходит операции.

Фраза invalid literal for int() with base 10 переводится как «неверный литерал для int() по основанию 10». int() читает строку как десятичное число, а в кавычках в конце — то, что прочитать не удалось.

age = int("двадцать")

Ошибка выполнения — main.py, строка 1

ValueError: invalid literal for int() with base 10: 'двадцать'

int() умеет собирать число только из цифр, необязательного знака и, для других оснований, подходящих символов. Слово «двадцать», дробь "3.5", пустая строка и пробел внутри числа под эти правила не попадают. Как устроены типы и преобразования int(), float() и str(), разобрано в статье «Типы данных в Python: полный гайд для начинающих».

Почему возникает ValueError?

Что видно в кодеЧто произошлоЧто проверить
int("abc")Буквы вместо цифрСодержимое строки
int("3.5")Дробь, а не целое числоfloat() вместо int()
int("")Пустая строкаПустой ввод
int("10 000")Пробел внутри числаРазделители разрядов
int("0x1F")Число в другой системе счисленияПараметр base
int(input()) с текстомПользователь ввёл не числоПроверку ввода

1. Пользователь ввёл текст вместо числа

age = int(input("Сколько тебе лет? "))
print("В следующем году тебе будет", age + 1)

Ошибка выполнения — main.py, строка 1

ValueError: invalid literal for int() with base 10: 'тридцать'

input() всегда возвращает строку, а int() не умеет угадывать числа из слов. Ввод пользователя невозможно проконтролировать заранее, поэтому это главный источник ошибки: программа ждёт 25, а приходит двадцать, двадцать пять или случайный текст. Ввод нужно проверять, а не предполагать.

2. В строке дробь, а не целое число

price = int("199.90")

Ошибка выполнения — main.py, строка 1

ValueError: invalid literal for int() with base 10: '199.90'
price = int(float("199.90"))
print(price)
199

int() не принимает строку с точкой. Сначала переведи её в float("199.90"), а результат — в int(). При этом int() отбрасывает дробную часть, а не округляет: получится 199, а не 200. Если копейки важны, не преобразовывай в int() вовсе — работай с float().

3. Пустая строка

first = int(input("Первое число: "))

Ошибка выполнения — main.py, строка 1

ValueError: invalid literal for int() with base 10: ' '

Пустая строка — это тоже не число. Такое бывает не только при вводе, но и при чтении файлов: пустая строка в конце файла или пропущенное поле. До преобразования проверяй, что строка непустая, — или перехватывай ошибку так же, как любой неверный ввод.

4. Пробел внутри числа

total = int("10 000")

Ошибка выполнения — main.py, строка 1

ValueError: invalid literal for int() with base 10: '10 000'
total = int("10 000".replace(" ", ""))
print(total)
10000

Как обрабатывать ввод пользователя правильно?

Когда число вводит человек, неверный ввод — это нормальное событие программы, а не дефект кода. Устойчивая программа просит повторить ввод, пока не получит число:

while True:
    age_str = input("Сколько тебе лет? ")
    try:
        age = int(age_str)
        break
    except ValueError:
        print("Введи целое число, например 25")

print("В следующем году тебе будет", age + 1)
Введи целое число, например 25
В следующем году тебе будет 21

Цикл повторяется, пока int() не сработает: break выходит из него после удачного преобразования. Схема «while True и break по условию» разобрана в статье «Бесконечный цикл в Python: почему возникает и как остановить».

ValueError и TypeError — в чём разница?

ОшибкаЧто не такПример
ValueErrorТип правильный, значение не подходитint("abc")
TypeErrorНе подходит сам типint(None)

Строка — подходящий тип для int(), поэтому неверное содержимое даёт ValueError. А None или список int() вообще не принимает — это TypeError. Разбор ошибки «can only concatenate str» и правил сочетания типов — в статье «TypeError: can only concatenate str (not int) в Python».

Где та же логика сломает код снова?

  • float("abc") даст родственную ошибку с другим текстом: ValueError: could not convert string to float.
  • float("3,5") с запятой упадёт так же: десятичный разделитель в Python — точка, а не запятая.
  • int("25%") упадёт из-за знака процента: int() принимает только цифры, знак и пробелы по краям.
  • Проверка .isdigit() не защищает от отрицательных чисел: "-5".isdigit() вернёт False, хотя int("-5") работает.
  • int("0x1F") упадёт, хотя это корректное шестнадцатеричное число: для него нужен параметр основания — int("0x1F", 16) вернёт 31.

Когда обработчик уместен, а когда нет?

Граница простая: try/except ValueError — для данных, которые ты не контролируешь: ввод пользователя, файлы, ответы API. Для собственных строк, которые по замыслу должны быть числами, исправляй источник: убери пробел, выбери float() или проверь пустую строку до преобразования.

Короткие ответы про invalid literal for int()

Что значит invalid literal for int() with base 10?

Python не смог прочитать строку как десятичное целое число. В кавычках в конце сообщения — сама строка: 'двадцать', '3.5', '' или '10 000'.

Как исправить ошибку при int(input())?

Ввод пользователя нельзя контролировать, поэтому оберни преобразование в try/except ValueError и проси повторить ввод, пока не получится число.

Почему int('3.5') падает, а int(3.5) работает?

int(3.5) получает число float и отбрасывает дробную часть — получается 3. А '3.5' — строка, и int() её не разбирает. Сначала float('3.5'), потом int().

Почему int(' 25 ') работает, а int('10 000') нет?

Пробелы по краям строки int() игнорирует, а пробел внутри числа ломает разбор. Убери внутренние пробелы, например через .replace(" ", "").

В чём разница между ValueError и TypeError?

ValueError — тип подходящий, но значение не то: int("abc"). TypeError — не подходит сам тип: int(None). Один и тот же int() может дать и ту, и другую ошибку в зависимости от аргумента.

Главное про invalid literal for int():

  1. Строка в кавычках — отправная точка

    Python показывает, что именно не удалось преобразовать. Начинай диагностику с неё.

  2. int() принимает строгое подмножество строк

    Цифры, необязательный знак и пробелы по краям. Дробь, пустая строка и пробел внутри числа — уже ValueError.

  3. Дробь идёт через float()

    int(float("199.90")) вернёт 199 с отбрасыванием дробной части, а не округлением.

  4. Ввод пользователя — нормальное событие

    Проверяй его циклом с try/except ValueError, а не предполагай, что введут число.

  5. Не путай значение и тип

    ValueError — про содержимое строки, TypeError — про тип аргумента.

Кот-наставник

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

Пусть ввод пользователя перестанет ронять программу!

На SkillPy ты пишешь программы с интерактивным input() и сразу видишь, что происходит при любом вводе. AI-наставник объяснит, почему упало и как проверить данные до преобразования. Первые задачи доступны бесплатно.