Я создаю программу, которая читает файл, и если первая строка файла не пуста, она читает следующие четыре строки. Вычисления выполняются по этим строкам, а затем читается следующая строка. Если эта строка не пуста, она продолжается. Тем не менее, я получаю эту ошибку:
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())
with open(file_to_read, 'r') as infile:
там.Ответы:
Только для записи:
Получил меня здесь ...
Должен быть использован!
источник
int()
пустую строку. «Используйте вместо этого float ()» не решает эту проблему. Вы все еще получаете ValueError.Следующее полностью приемлемо в Python:
int
float
float
int
float
Но вы получите ,
ValueError
если передать строковое представление поплавка вint
или строковое представление чего - либо , но целое число ( в том числе пустая строка). Если вы хотите передать строковое представление числа с плавающей точкойint
, как указывает @katyhuff выше, вы можете сначала преобразовать в число с плавающей точкой, а затем в целое число:источник
int()
пустую строку. «Используйте вместо этого float ()» не решает эту проблему. Вы все еще получаете ValueError.int(float(x))
. Так как это первый вопрос, который появляется при поиске этой ошибки.Pythonic способ итерации по файлу и преобразования в int:
То, что вы пытаетесь сделать, немного сложнее, но все же не так просто:
Таким образом, он обрабатывает 5 строк одновременно. Используйте
h.next()
вместоnext(h)
Python 2.6.Причина , по которой было
ValueError
потому , чтоint
не может конвертировать пустую строку в целое число. В этом случае вам нужно либо проверить содержимое строки перед преобразованием, либо исключить ошибку:источник
n = int(line) if line.is_integer() else int(float(line))
Я нашел работу вокруг. Python преобразует число в число с плавающей точкой. Сначала просто вызовет float, а затем преобразует его в int:
output = int(float(input))
источник
Причина в том, что вы получаете пустую строку или строку в качестве аргумента в int. Проверьте, является ли он пустым или содержит буквенные символы. Если он содержит символы, просто игнорируйте эту часть.
источник
Причина, по которой вы получаете эту ошибку, состоит в том, что вы пытаетесь преобразовать символ пробела в целое число, что абсолютно невозможно и ограничено. И именно поэтому вы получаете эту ошибку.
Проверьте код и исправьте его, он будет работать нормально
источник
Так что если у вас есть
Вы можете преобразовать его
int
сfloatInInt = int(float(floatInString))
источник
У вас проблема с этой строкой:
Это не находит пустую строку. Находит строку, состоящую из одного пробела. Предположительно это не то, что вы ищете.
Прислушайтесь к советам всех остальных. Это не очень идиоматический код на Python, и он будет намного понятнее, если вы перебираете файл напрямую, но я думаю, что эта проблема также стоит отметить.
источник
Пожалуйста, проверьте эту функцию (
split()
) на простом файле. Я столкнулся с той же проблемой и обнаружил, что онаsplit()
была написана неправильно (обработка исключений).источник
Есть проблема с этим кодом.
readings
это новая строка, прочитанная из файла - это строка Поэтому вам не следует сравнивать его с 0. Кроме того, вы не можете просто преобразовать его в целое число, если не уверены, что оно действительно одно. Например, пустые строки приведут к ошибкам (как вы наверняка узнали).А зачем вам глобальный подсчет? Это, безусловно, плохой дизайн в Python.
источник
Это также может произойти, когда вам нужно отобразить целые числа через пробел в список, но вы вводите целые числа построчно, используя
.input()
. Как, например, я решал эту проблему на HackerRank Bon-Appetit , и во время компиляции я получил следующую ошибкуПоэтому вместо того, чтобы построчно вводить данные в программу, попробуйте отобразить разделенные пробелом целые числа в список с помощью
map()
метода.источник
Примерно так должно работать:
источник
Я получал похожие ошибки, оказалось, что набор данных имел пустые значения, которые Python не мог преобразовать в целое число.
источник
Я попал в ту же проблему, пытаясь использовать readlines () внутри цикла for для одного и того же файлового объекта ... Я подозреваю, что запуск readling () внутри readline () для того же файлового объекта вызвал эту ошибку.
Лучшим решением может быть использование seek (0) для сброса указателя файла или условия дескриптора с установкой некоторого флага, а затем создание нового объекта для того же файла путем проверки заданного условия ....
источник
Недавно мне попался случай, когда ни один из этих ответов не сработал. Я столкнулся с данными CSV, в которых были нулевые байты, смешанные с данными, и эти нулевые байты не были удалены. Итак, моя числовая строка, после удаления, состояла из таких байтов:
Чтобы противостоять этому, я сделал:
... где fields - список значений csv, полученных в результате разбиения строки.
источник
Кажется, что показания иногда являются пустой строкой, и, очевидно, возникает ошибка. Вы можете добавить дополнительную проверку в цикл while перед командой int (readings), например:
источник
Мне было трудно выяснить истинную причину, это происходит, когда мы не читаем правильно из файла. вам нужно открыть файл и прочитать с помощью метода readlines (), как показано ниже:
Исправляет форматированный вывод
источник
ваш ответ выбрасывает ошибки из-за этой строки
источник