Ошибка 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() или проверь пустую строку до преобразования.
Как устроен весь механизм — чтение traceback, блоки except/else/finally и поднятие собственных ошибок через raise — смотри в гайде «Ошибки и исключения в Python: try, except, else, finally».
Короткие ответы про 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():
- Строка в кавычках — отправная точка
Python показывает, что именно не удалось преобразовать. Начинай диагностику с неё.
- int() принимает строгое подмножество строк
Цифры, необязательный знак и пробелы по краям. Дробь, пустая строка и пробел внутри числа — уже
ValueError. - Дробь идёт через float()
int(float("199.90"))вернёт199с отбрасыванием дробной части, а не округлением. - Ввод пользователя — нормальное событие
Проверяй его циклом с
try/except ValueError, а не предполагай, что введут число. - Не путай значение и тип
ValueError— про содержимое строки,TypeError— про тип аргумента.
Кот-наставник— Ошибка не в Python, а в стыке данных и операции:
int()не умеет угадывать. Посмотри на строку в кавычках и реши, где её чистить — до преобразования или в обработчике для внешнего ввода.
Пусть ввод пользователя перестанет ронять программу!
На SkillPy ты пишешь программы с интерактивным input() и сразу видишь, что происходит при любом вводе. AI-наставник объяснит, почему упало и как проверить данные до преобразования. Первые задачи доступны бесплатно.
