[Решение] ValueError: Invalid Literal For int() With Base 10 в Python

[Решение] ValueError: Invalid Literal For int() With Base 10 в Python

В этой статье мы рассмотрим из-за чего возникает ошибка ValueError: Invalid Literal For int() With Base 10 и как ее исправить в Python.

Введение

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

Описание ошибки ValueError

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

Использование функции int()

Функция int() в Python принимает строку или число в качестве первого аргумента и необязательный аргумент base, обозначающий формат числа. По умолчанию base имеет значение 10, которое используется для десятичных чисел, но мы можем передать другое значение base, например 2 для двоичных чисел или 16 для шестнадцатеричных. В этой статье мы будем использовать функцию int() только с первым аргументом, и значение по умолчанию для base всегда будет равно нулю. Это можно увидеть в следующих примерах.

Мы можем преобразовать число с плавающей точкой в целое число, как показано в следующем примере. Когда мы преобразуем число с плавающей точкой в целое число с помощью функции int(), цифры после десятичной дроби отбрасываются из числа на выходе.

num = 22.03
print(f"Число с плавающей точкой: {num}")
num = int(num)
print(f"Целое число: {num}")

Вывод программы:

Число с плавающей точкой: 22.03
Целое число: 22

Мы можем преобразовать строку, состоящую из цифр, в целое число, как показано в следующем примере. Здесь входные данные состоят только из цифр, поэтому они будут преобразованы в целое число.

num = "22"
print(f"Строка: {num}")
num = int(num)
print(f"Целое число: {num}")

Вывод программы

Строка: 22
Целое число: 22

Два типа входных данных, показанные в двух вышеприведенных примерах, являются единственными типами входных данных, для которых функция int() работает правильно. При передаче в качестве аргументов функции int() других типов входных данных будет сгенерирован ValueError с сообщением «invalid literal for int() with base 10». Теперь мы рассмотрим различные типы входных данных, для которых в функции int() может быть сгенерирован ValueError.

Причины возникновения ошибки

Как говорилось выше, «ValueError: invalid literal for int()» может возникнуть, когда в функцию int() передается ввод с несоответствующим значением. Это может произойти в следующих случаях.

Случай №1

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

В этом примере мы передаем в функцию int() строку, содержащую буквенно-цифровые символы, из-за чего возникает ValueError, выводящий на экран сообщение «ValueError: invalid literal for int() with base 10».

num = "22я"
print(f"Строка: {num}")
num = int(num)
print(f"Целое число: {num}")

Вывод программы

Строка: 22я
Traceback (most recent call last):
  File "/Users/krnlnx/Projects/Test/num.py", line 3, in <module>
    num = int(num)
ValueError: invalid literal for int() with base 10: '22я'

Случай №2

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

В этом примере мы передаем в функцию int() строку, содержащую пробел, из-за чего возникает ValueError, выводящий на экран сообщение «ValueError: invalid literal for int() with base 10».

num = "22 11"
print(f"Строка: {num}")
num = int(num)
print(f"Целое число: {num}")

Вывод программы

Строка: 22 11
Traceback (most recent call last):
  File "/Users/krnlnx/Projects/Test/num.py", line 3, in <module>
    num = int(num)
ValueError: invalid literal for int() with base 10: '22 11'

Случай №3

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

В этом примере мы передаем в функцию int() строку, содержащую символ точки «.», из-за чего возникает ValueError, выводящий сообщение «ValueError: invalid literal for int() with base 10».

num = "22.11"
print(f"Строка: {num}")
num = int(num)
print(f"Целое число: {num}")

Вывод программы

Строка: 22.11
Traceback (most recent call last):
  File "/Users/krnlnx/Projects/Test/num.py", line 3, in <module>
    num = int(num)
ValueError: invalid literal for int() with base 10: '22.11'

Как избежать ошибки?

Мы можем избежать исключения ValueError: invalid literal for int() with base 10, используя упреждающие меры для проверки того, состоит ли входной сигнал, передаваемый функции int(), только из цифр или нет. Для проверки того, состоит ли входной сигнал, передаваемый функции int(), только из цифр, можно использовать следующие способы.

  • Мы можем использовать регулярные выражения, чтобы проверить, состоит ли входной сигнал, передаваемый функции int(), только из цифр или нет. Если входные данные содержат символы, отличные от цифр, мы можем сообщить пользователю, что входные данные не могут быть преобразованы в целое число. В противном случае мы можем продолжить работу в обычном режиме.
  • Мы также можем использовать метод isdigit(), чтобы проверить, состоит ли входная строка только из цифр или нет. Метод isdigit() принимает на вход строку и возвращает True, если входная строка, переданная ему в качестве аргумента, состоит только из цифр в десятичной системе. В противном случае он возвращает False. После проверки того, состоит ли входная строка только из цифр или нет, мы можем преобразовать входные данные в целые числа.
  • Возможна ситуация, когда входная строка содержит число с плавающей точкой и имеет символ точки «.» между цифрами. Для преобразования таких входных данных в целые числа с помощью функции int() сначала проверим, содержит ли входная строка число с плавающей точкой, т.е. имеет ли она только один символ точки между цифрами или нет, используя регулярные выражения. Если да, то сначала преобразуем входные данные в число с плавающей точкой, которое можно передать функции int(), а затем выведем результат. В противном случае будет сообщено, что входные данные не могут быть преобразованы в целое число.
  • Мы также можем использовать обработку исключений, используя try except для обработки ValueError при возникновении ошибки. В блоке try мы обычно выполняем код. Когда произойдет ошибка ValueError, она будет поднята в блоке try и обработана блоком except, а пользователю будет показано соответствующее сообщение.

Заключение

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

Егор Егоров

Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Карина

    Написать библиотеку, проверяющую строку на соответствие введённому формуле: id111-xy4e-34. Обязательными в данной строке являются: Начинается строка с символа id и трех кодовых цифр; Символ «-» является разделителем. Поэтому он также обязателен. Вторая часть кода может содержать как цифры, так и буквы латинского алфавита. Заканчивается код двузначным числом.
    Помогите пожалуйста))))

    Ответить
  2. vladimir

    Здравствуйте. вытаскиваю данные из csv файла и столбец с ценой имеет пробелы , убираю пробелы new_list3 = ‘ ‘.join(row[«-IV- от 140000 руб.»].split()) , но записать получившиеся данные в БД не могу по причине не соответствия типа . Каким образом я бы мог преобразовать эти строки в int или float ?
    ошибка:
    new_list3 = float(».join(row[«-IV- от 140000 руб.»].split()))
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ValueError: could not convert string to float: ‘188,79’
    ошибка:
    new_list3 = int(».join(row[«-IV- от 140000 руб.»].split()))
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ValueError: invalid literal for int() with base 10: ‘188,79’

    Ответить
  3. Ekaterina

    Здравствуйте! Происходит ошибка после ввода числа (от 0 до 2047), не могу разобраться, что не так:

    data = int(input(«Введите число от 0 до 2047: «))
    if data 2047:
    print(«Ошибка: введено некорректное число»)
    else:
    data_bits = [int(x) for x in format(data, ‘011b’)]
    encoded_bits = hamming_encode(data_bits)
    encoded = int(».join([str(d) for d in encoded_bits]), 2)
    print(«Кодированное сообщение: «, encoded)

    ValueError: invalid literal for int() with base 2: ‘051010045004000’ (если введено число 56, к примеру)

    Ответить
  4. Султан

    у меня выдает такую ошибку почему то, если я передаю больше одной переменной в строку:
    a = int(input())
    b = int(input())
    c = int(input())
    print(a + b + c)
    вот такой код и вот такая ошибка:
    ValueError: invalid literal for int() with base 10: »
    как только я в строку ввода данных ввожу 2 число сразу выходит эта ошибка

    Ответить
    1. 1

      Нашел решение? А то такая же тема

      Ответить
      1. Rot

        Аналогично. Ошибка после второго инпута.

        Ответить
    2. Cat

      Вот как решить эту проблему
      # ввод переменных
      a = float(input())
      b = float(input())
      c = float(input())
      # убираем дробную часть при сложении челых чисел.
      if (a + b + c) % 1 == 0:
      print(int(a + b + c))
      else:
      print(a + b + c)

      Ответить
  5. Дмитрий

    Отличный комментарий! У меня также возникла подобная ошибка, но в другой ситуации. В игровой программе, в которой необходимо угадать число с 6 попыток, после второй попытки игра вылетает с такой ошибкой:
    Привет! Как тебя зовут?
    ааааа
    Что ж, ааааа, я загадываю число от 1 до 20
    Попробуй угадать5

    Traceback (most recent call last):
    File «C:\Users\Dmitry\Desktop\r.py», line 14, in
    guess = int(guess)
    ValueError: invalid literal for int() with base 10: »

    Process finished with exit code 1
    Прочитав вашу статью пришел к выводу, что моя ситуация отличается о вышеизложенных. Не могли бы вы прокомментировать данную ситуацию?

    Ответить
    1. Егор Егоров автор

      Дмитрий, по тексту этой ошибки сложно определить что у вас произошло.
      Нужно смотреть что происходило по стеку выше.

      Если до сих пор не разобрались, то предлагаю вам опубликовать код на github gist и приложить ссылочкой, я погляжу.

      Ответить