ValueError: int() with base 10: ''

为什么会出现这个错误?

ValueError: int()以10为基数的无效文字:"。

3066708 次浏览

python式的遍历文件并转换为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行。在Python 2.6之前使用h.next()而不是next(h)

之所以使用ValueError,是因为int不能将空字符串转换为整数。在这种情况下,你需要在转换前检查字符串的内容,或者除了一个错误:

try:
int('')
except ValueError:
pass      # or whatever
    readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)

这段代码有问题。readings是从文件中读取的新行-它是一个字符串。所以你不应该把它和0比较。此外,您不能直接将它转换为整数,除非您是确定,它确实是1。例如,空行在这里会产生错误(您肯定已经发现了)。

为什么需要全球计数?这肯定是Python中糟糕的设计。

我正在创建一个程序,读取 文件和if文件的第一行 是不是空白,它读下四个 行。计算在 这些线,然后下一条线是 阅读。< / p >

像这样的东西应该工作:

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

你对这句话有问题:

while file_to_read != " ":

这不会找到空字符串。它找到一个由一个空格组成的字符串。想必这不是你要找的。

听取别人的建议。这不是非常地道的python代码,如果直接遍历文件,就会清楚得多,但我认为这个问题也值得注意。

错误的结尾显示了试图解析的值。

作为一个更明确的例子。

>>> int('55063.000000')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '55063.000000'

在本例中,您试图将空字符串解析为整数。

对于上面的浮动示例,它需要转换两次。

>>> int(float('55063.000000'))
55063

我得到了类似的错误,原来数据集有空白值,python无法将其转换为整数。

请在一个简单的文件上测试这个函数(split())。我遇到了同样的问题,发现这是因为split()没有正确编写(异常处理)。

原因是你得到了一个空字符串或者一个字符串作为int的参数。检查它是否为空或包含alpha字符。如果它包含字符,那么就忽略这部分。

当您必须将空格分隔的整数映射到一个列表,但您使用.input()逐行输入整数时,也会发生这种情况。 例如,我在HackerRank 祝你有个好胃口上解决这个问题,在编译时得到了以下错误 # EYZ0 < / p >

因此,不要逐行向程序输入,而是尝试使用map()方法将空格分隔的整数映射到列表中。

以下语句在python中是完全可以接受的:

  • 将一个整数的字符串表示形式传递给int
  • 将浮点数的字符串表示形式传递给float
  • 将一个整数的字符串表示形式传递给float
  • 传递一个浮点数到int
  • 传递一个整数到float

但是,如果您将浮动的字符串表示形式传递给int,或者任何非整数的字符串表示形式(包括空字符串),则会得到ValueError。如果你确实想将浮点数的字符串表示形式传递给int,就像上面@katyhuff指出的那样,你可以先转换为浮点数,然后再转换为整数:

>>> 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

您得到这个错误的原因是您正在尝试将空格字符转换为整数,这是完全不可能和受限制的。这就是为什么你会得到这个错误enter image description here

检查您的代码并纠正它,它将工作正常

当我试图在同一个文件对象的for循环中使用readlines()时,我遇到了同样的问题…我怀疑是同一个文件对象在readline()内触发readling()导致了此错误。

最好的解决方案是使用seek(0)重置文件指针或 通过设置一些标志来处理条件,然后通过检查设置条件....

来为同一文件创建新对象
我找到了一个变通的办法。Python会将数字转换为浮点数。简单地先调用float,然后将其转换为int类型就可以了: # EYZ0 < / p >

所以如果你有

floatInString = '5.0'

你可以用floatInInt = int(float(floatInString))将它转换为int

我最近遇到了一个案例,这些答案都不管用。我遇到的CSV数据中混合了空字节,这些空字节没有被剥离。所以,我的数字字符串,剥离后,由这样的字节组成:

\x00\x31\x00\x0d\x00

为了解决这个问题,我做了:

countStr = fields[3].replace('\x00', '').strip()
count = int(countStr)

...其中fields是分隔行产生的CSV值列表。

这看起来读数有时是一个空字符串,显然会出现错误。 你可以在你的while循环int(阅读)命令之前添加一个额外的检查,比如:

while readings != 0 or readings != '':
readings = int(readings)
我很难弄清楚真正的原因,当我们没有正确地从文件中读取时就会发生这种情况。 您需要打开文件并使用readlines()方法读取,如下所示
with open('/content/drive/pre-processed-users1.1.tsv') as f:
file=f.readlines()

它纠正格式化的输出

因为这一行,你的答案是抛出错误

readings = int(readings)
  1. 在这里,您试图将字符串转换为int类型,而不是以10为基数。你只能将一个以10为基数的字符串转换为int,否则它将抛出ValueError,声明以10为基数的int()的无效字面量。

另一个答案,以防以上所有的解决方案都不适合你。

我最初的错误类似于OP: ValueError: int()以10为基数的无效字面量:'52,002'

然后我尝试了接受的答案,得到了这个错误:ValueError:无法将字符串转换为浮点数:'52,002' -这是当我尝试int(float(variable_name))时

我的解决方案是将字符串转换为浮点数,并将其留在那里。我只是需要检查是否字符串是一个数值,这样我就可以正确地处理它。

try:
float(variable_name)
except ValueError:
print("The value you entered was not a number, please enter a different number")
我在Django中遇到了这个错误-在我的模型中,我有一个DateTimeField(),上面有一些保存的对象。 然后当我把字段改为DateField().

# EYZ3;我只是简单地编辑我的数据库(db.sqlite3),因为我把日期值从这种格式2021-08-09 13:05:45改为2021-08-09,这就是全部。

我对这个问题的简单解决方法是将我的代码包装在if语句中,利用空字符串是不是“真实的”;:

给定这两个输入中的任意一个:

input_string = ""    # works with an empty string
input_string = "25"  # or a number inside a string

你可以使用这个检查安全地处理一个空白字符串:

if input_string:
number = int(input_string)
else:
number = None # (or number = 0 if you prefer)


print(number)