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
inprint select_word(a)
BTW?这是机密…那么我该怎么办?我在不同的python文件中打开文件并导入了这个文件,我认为这是导致问题的原因,对吧?实际上它解决了问题,但我不知道如果你正在阅读一本书,并且到达了最后一页,还有什么要读的吗?不,就是这样。这是队伍的终点。如果你想继续阅读,你需要从前面开始。代码中也有同样的东西。感谢您提供了这个示例
Line: 1
Line: 2