Что означает ошибка ValueError: invalid literal for int() with base 10
easy

Что означает ошибка ValueError: invalid literal for int() with base 10

Что будет, если попытаться преобразовать в число то, что похоже на число, но им не является

Ситуация: мы пишем программу для бухгалтерии, программа берёт зарплату сотрудников и высчитывает, сколько они получат на руки после вычета налога 13%. Для проверки выгружаем зарплату из бухгалтерии и пишем простой код, на основе которого будем делать функцию:

# данные из бухгалтерии
salary = '120 000'
# переводим строку в число
total = int(salary)
# считаем сумму после вычета налогов
for_pay = total - total*0.13
# выводим результат
print('К выдаче: ' + str(for_pay))

Но при запуске даже такого простого кода мы получаем ошибку:

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

Что означает ошибка ValueError: invalid literal for int() with base 10

Что это значит: Python не смог перевести нашу строку в число. Ещё компьютер мог предположить, что мы используем в числе не десятичную систему счисления, а какую-то другую, поэтому добавил текст про основание системы счисления: with base 10.

Когда встречается: когда мы пытаемся преобразовать в десятичное число что-то, что по мнению Python таким числом не является. Это могут быть строки, числа в другом формате или сложные объекты (например, массивы).

Что делать с ошибкой ValueError: invalid literal for int() with base 10

Давайте посмотрим, что не так с нашим кодом.

Ошибка возникает на этапе перевода строки в число, и кажется, что всё верно: в строке у нас 22 тысячи. Но система в бухгалтерии была настроена так, что она добавляет пробел, чтобы отделять разряды друг от друга. Бухгалтерам так удобнее — можно быстро понять масштаб цифр и не считать нули вручную. Компьютер ничего не знает про удобство бухгалтеров и рассуждает так:

  1. У меня есть строка с какими-то данными.
  2. Её пытаются преобразовать в целое число.
  3. Но внутри стоит пробел, значит, это точно не число.
  4. Непонятно, что делать, надо остановить выполнение кода и вывести сообщение об ошибке.

Получается, что ошибка у нас как раз из-за пробела в числе. Её можно решить двумя способами: убрать вручную пробел или написать функцию, которая сделает это за нас. Сейчас пойдём по простому пути, а когда будем писать полноценную функцию, прикрутим уже автоматическое убирание пробелов (сейчас этого делать не будем).

Убираем пробел из бухгалтерской строки и видим, что ошибка ушла, код работает как нужно:

# данные из бухгалтерии, но без пробелов
salary = '120000'
# переводим строку в число
total = int(salary)
# считаем сумму после вычета налогов
for_pay = total - total*0.13
# выводим результат
print('К выдаче: ' + str(for_pay))

Обложка:

Алексей Сухов

Корректор:

Елена Грицун

Вёрстка:

Мария Климентьева

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy