ValueError: неверный литерал для int() с базой 10: ''
Я создаю программу, которая читает файл, и если первая строка файла не пуста, она читает следующие четыре строки. Вычисления выполняются на этих строках, а затем считывается следующая строка. Если эта строка не пуста, она продолжается. Однако я получаю эту ошибку:
ValueError: invalid literal for int() with base 10: ''.`
Он читает первую строку, но не может преобразовать ее в целое.
Что я могу сделать, чтобы исправить эту проблему?
Код:
file_to_read = raw_input("Enter file name of tests (empty string to end program):")
try:
infile = open(file_to_read, 'r')
while file_to_read != " ":
file_to_write = raw_input("Enter output file name (.csv will be appended to it):")
file_to_write = file_to_write + ".csv"
outfile = open(file_to_write, "w")
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
minimum = (infile.readline())
maximum = (infile.readline())
Ответы
Ответ 1
Только для записи:
>>> 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('55063.000000')
55063.0
Используется!
Ответ 2
Pythonic способ итерации по файлу и преобразования в int:
for line in open(fname):
if line.strip(): # line contains eol character(s)
n = int(line) # assuming single integer on each line
То, что вы пытаетесь сделать, немного сложнее, но все же не прямолинейно:
h = open(fname)
for line in h:
if line.strip():
[int(next(h).strip()) for _ in range(4)] # list of integers
Таким образом, он обрабатывает 5 строк в то время. Используйте h.next()
вместо next(h)
до Python 2.6.
Причина, по которой вы имели ValueError
, состоит в том, что int
не может преобразовать пустую строку в целое число. В этом случае вам нужно либо проверить содержимое строки перед преобразованием, либо за исключением ошибки:
try:
int('')
except ValueError:
pass # or whatever
Ответ 3
В python вполне приемлемы следующие:
- передавая строковое представление целого числа в
int
- передача строкового представления поплавка в
float
- передача строкового представления целого числа в
float
- передача float в
int
- передача целого числа в
float
Но вы получаете ValueError
если передаете строковое представление float в int
или строковое представление чего-либо, кроме целого (включая пустую строку). Если вы хотите передать строковое представление float в int
, как указывает @katyhuff выше, вы можете сначала преобразовать его в float, а затем в целое число:
>>> int('5')
5
>>> float('5.0')
5.0
>>> float('5')
5.0
>>> int(5.0)
5
>>> float(5)
5.0
>>> int('5.0')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
>>> int(float('5.0'))
5
Ответ 4
Причина: вы получаете пустую строку или строку в качестве аргумента в int
проверить его до того, как он пуст или содержит альфа-символы или нет, если он содержит, чем просто игнорировать эту часть.
Ответ 5
У вас есть проблема с этой строкой:
while file_to_read != " ":
Это не находит пустую строку. Он находит строку, состоящую из одного пробела. Предположительно, это не то, что вы ищете.
Слушайте все остальные советы. Это не очень идиоматический код на Python, и было бы намного яснее, если бы вы перебирали файл напрямую, но я думаю, что эта проблема тоже стоит отметить.
Ответ 6
Проверьте эту функцию (split()
) на простой файл. Я столкнулся с той же проблемой и обнаружил, что это потому, что split()
не был правильно написан (обработка исключений).
Ответ 7
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
Проблема с этим кодом. readings
- это новая строка, считанная из файла - это строка. Поэтому вы не должны сравнивать его с 0. Кроме того, вы не можете просто преобразовать его в целое число, если вы не уверены в этом. Например, пустые строки будут вызывать ошибки здесь (как вы наверняка узнали).
И зачем вам глобальный счет? Это, безусловно, плохой дизайн в Python.
Ответ 8
Я создаю программу, которая читает файл, и если первая строка файла не является пустым, он читает следующие четыре линий. Расчеты выполняются по эти строки, а затем следующая строка читать.
Что-то вроде этого должно работать:
for line in infile:
next_lines = []
if line.strip():
for i in xrange(4):
try:
next_lines.append(infile.next())
except StopIteration:
break
# Do your calculation with "4 lines" here
Ответ 9
Я получал похожие ошибки, получается, что в наборе данных были пустые значения, которые python не мог преобразовать в integer.
Ответ 10
Это также может произойти, когда вам нужно сопоставить целые числа, разделенные пробелом, в список, но вы вводите целые числа по строкам с помощью .input()
.
Например, я решал эту проблему на HackerRank Bon-Appetit, и при компиляции получена следующая ошибка
![введите описание изображения здесь]()
Поэтому вместо того, чтобы вводить строку в строку программы, попробуйте сопоставить целые числа, разделенные пробелами, в список, используя метод map()
.
Ответ 11
Причина, по которой вы получаете эту ошибку, заключается в том, что вы пытаетесь преобразовать символ пробела в целое число, что совершенно невозможно и ограничено. И почему вы получаете эту ошибку. ![enter image description here]()
Проверьте свой код и исправьте его, он будет работать нормально
Ответ 12
Я попал в ту же проблему при попытке использовать readlines() внутри цикла для одного и того же объекта файла... Мое подозрение - это стрельба readling() внутри readline() для того же файла, вызвавшего эту ошибку.
Лучшим решением может быть использование seek (0) для сброса указателя файла или условия обработки с установкой некоторого флага, а затем создания нового объекта для того же файла путем проверки установленного условия....