值错误:基数为10的int()的文字无效:''

时间:2013-07-17 15:57:59

标签: python python-2.7

我是Python的新手,我不知道为什么我有时会收到这个错误。

这是代码:

import random
sorteio = []
urna = open("urna.txt")

y = 1
while y <= 50:
    sort = int(random.random() * 392)
    print sort
    while sort > 0:
        x = urna.readline()
        sort = sort - 1
    print x  
    sorteio = sorteio + [int(x)]
    y = y + 1
print sorteio

其中urna.txt是此格式的文件:

1156
459
277
166
638
885
482
879
33
559

如果有人知道为什么会出现此错误以及如何解决此问题,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

尝试读取文件末尾时,您将获得一个无法转换为int的空字符串''

>>> int('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
如果我正确理解你的问题,

满足从文本值中选择50个随机行的要求:

import random

with open("urna.txt") as urna:
    sorteio = [int(line) for line in urna] # all lines of the file as ints

selection = random.sample(sorteio, 50)

print selection

答案 1 :(得分:1)

当你到达文件的末尾时,

.readline()返回一个空字符串,这不是一个有效的数字。

测试它:

if x.strip():  # not empty apart from whitespace
    sorteio = sorteio + [int(x)]

您似乎正在列表中;列表有一个方法:

sorteio.append(int(x))

如果您想从文件中获取随机样本,则有更好的方法。一种是读取所有值,然后使用random.sample(),或者您可以在逐行读取文件时选择值,同时调整下一行是样本的一部分的可能性。有关该主题的更深入讨论,请参阅a previous answer of mine