Python 随机函数中的索引超出范围

Python 随机函数中的索引超出范围,python,Python,我有这个功能,只需打开一个文本文件并读取行: def select_word(model): lines = model.read().splitlines() selectedline = random.choice(lines) return [selectedline.split(":")[0],selectedline.split(":")[1]] 当我只调用一个函数时,没有问题。但当我不止一次地称之为: print select_word(a) print s

我有这个功能,只需打开一个文本文件并读取行:

def select_word(model):
    lines = model.read().splitlines()
    selectedline = random.choice(lines)
    return [selectedline.split(":")[0],selectedline.split(":")[1]]
当我只调用一个函数时,没有问题。但当我不止一次地称之为:

print select_word(a)
print select_word(a)
print select_word(a)
print select_word(a)
print select_word(a)
我得到了这个错误:

Traceback (most recent call last):
  File "wordselect.py", line 58, in <module>
    print select_word("noun")   
  File "wordselect.py", line 19, in select_word
    selectedline = random.choice(lines)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/random.py", line 275, in choice
    return seq[int(self.random() * len(seq))]  # raises IndexError if seq is empty
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“wordselect.py”,第58行,在
打印选择单词(“名词”)
文件“wordselect.py”,第19行,选择单词
selectedline=随机。选项(行)
文件“/usr/local/ceral/python/2.7.11/Frameworks/python.framework/Versions/2.7/lib/python2.7/random.py”,第275行,在选项中
返回seq[int(self.random()*len(seq))]#如果seq为空,则引发索引器
索引器:列表索引超出范围
该函数有什么问题?

如果传递空序列,将引发
索引器。当您第二次调用文件对象时会发生这种情况(只能执行一次,后续调用将返回空字符串)

要修复函数,您可以读取一次文件,然后将行传递给函数,例如:

lines = list(model)

def select_word(lines):    
    selectedline = random.choice(lines)
    return selectedline.split(":", 1)

文件句柄像生成器一样运行。一旦您读取了一个文件,您就到达了流的末尾

model.seek(0) # bring cursor to start of file after reading, at 2nd line of the function
我这样做了,没有遇到任何问题。 只要确保在您打开的文件中有类似的内容

Line: 1
Line: 2

你的函数没有打开任何文件..没有打开,我在另一个地方定义了这个模型。它与一个调用一起工作您应该在函数中打开文件…所以再次…您的函数不会打开任何文件!什么是
a
in
print select_word(a)
BTW?这是机密…那么我该怎么办?我在不同的python文件中打开文件并导入了这个文件,我认为这是导致问题的原因,对吧?实际上它解决了问题,但我不知道如果你正在阅读一本书,并且到达了最后一页,还有什么要读的吗?不,就是这样。这是队伍的终点。如果你想继续阅读,你需要从前面开始。代码中也有同样的东西。感谢您提供了这个示例
Line: 1
Line: 2