ValueError: недопустимый литерал для int() с основанием 10: ''
Я получил следующую ошибку в своем коде:
ValueError: invalid literal for int() with base 10: ''.
Что это значит? Почему она возникает и как я могу это исправить?
5 ответ(ов)
Сообщение об ошибке означает, что строка, переданная в функцию int
, не может быть преобразована в целое число. Часть в конце, после двоеточия, показывает строку, которая была предоставлена.
В описанном в вопросе случае входные данные представляли собой пустую строку, написанную как ''
.
Вот еще один пример — строка, представляющая значение с плавающей запятой, не может быть непосредственно преобразована с помощью int
:
>>> int('55063.000000')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '55063.000000'
Вместо этого сначала нужно преобразовать строку в float
, а затем в int
:
>>> int(float('55063.000000'))
55063
В Python следующие операции работают без проблем:
>>> int('5') # передаем строковое представление целого числа в `int`
5
>>> float('5.0') # передаем строковое представление числа с плавающей точкой в `float`
5.0
>>> float('5') # передаем строковое представление целого числа в `float`
5.0
>>> int(5.0) # передаем число с плавающей точкой в `int`
5
>>> float(5) # передаем целое число в `float`
5.0
Однако, если вы попытаетесь передать строковое представление числа с плавающей точкой или любую другую строку, которая не представляет целое число (например, пустую строку ''
), будет вызвано исключение ValueError
:
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
>>> int('5.0')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
Чтобы конвертировать строковое представление числа с плавающей точкой в целое число, сначала необходимо преобразовать его в число с плавающей точкой, а затем в целое число, как объяснил @katyhuff в комментарии к вопросу:
>>> int(float('5.0'))
5
Ошибка int
не может преобразовать пустую строку в целое число. Если входная строка может быть пустой, подумайте о том, чтобы сначала проверить этот случай:
if data:
as_int = int(data)
else:
# выполните другое действие
Либо вы можете использовать обработку исключений:
try:
as_int = int(data)
except ValueError:
# выполните другое действие
Python автоматически преобразует число в формат float
. Для того чтобы корректно выполнить конвертацию, сначала вызовите float
, а затем преобразуйте результат в int
. Вот пример кода:
output = int(float(input))
Таким образом, вы получите нужное значение типа int
после преобразования.
Эта ошибка возникает, когда вы пытаетесь преобразовать пустую строку в целое число:
>>> int(5)
5
>>> int('5')
5
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
В данном случае функция int()
не может обработать пустую строку (''
), так как это невалидное значение для преобразования. Чтобы избежать этой ошибки, убедитесь, что строка не пустая, перед тем как пытаться преобразовать её в целое число. Например:
s = ''
if s:
number = int(s)
else:
print("Строка пустая, преобразование невозможно.")
Также можно использовать обработку исключений для более безопасного выполнения:
s = ''
try:
number = int(s)
except ValueError:
print("Не удалось преобразовать строку в целое число.")
Создание DataFrame из значений переменных вызывает ошибку "ValueError: If using all scalar values, you must pass an index"
Как изменить порядок столбцов в DataFrame?
Получение текущей даты в формате YYYY-MM-DD в Python
Как проверить тип NoneType в Python?
Использование @property против геттеров и сеттеров