2015-10-04 79 views
-1

在此先感谢您的答案。我试图研究自己对这个问题的答案几个小时没有用。我现在要求的不是答案,而是因为这是大学的任务问题。Python - 遇到IndexError问题:列表索引超出范围

我有一个程序,它将一组数据存储在单行记录中。它保存在一个名为'sales.txt'的文件中

有一个变量(customerIDInput)从另一个基本上是客户ID的函数中引入。

我的程序应该通过搜索线的记录行,发现每一个具有“customerIDInput”在索引记录0

我得到什么我会承担错误是循环的最后重复。索引超出范围。我最初认为这是最后一个(\ n),因此根本没有任何索引......但是我已经放入了rstrip(\ n'),问题还没有解决。

我意识到,我是新来的Python和答案或许很简单但是我在我头上,我认为,它似乎它的时间在这里问你聪明的人:)

附上功能我有困难。

def searchFile(): 

sales = open('sales.txt', 'r')  
transaction = 'START' 

while transaction != ' ': 

    transaction = sales.readline() 
    transactionStrip = transaction.rstrip('\n')   
    transaction_list = transactionStrip.split() 

    if transaction_list[0] == str(customerIDInput):  
     customerEntry = transaction_list 
     print('matching records are: ',customerEntry) 

sales.close() 
+0

@Samane请不要过去仅删除帖子的问候。是的,问候需要删除,但你也可以寻找其他改进? – Justin

回答

1

对文件对象的readline方法将在到达文件结尾时返回一个空字符串。当你的split为空字符串时,你会得到一个空列表,它没有第一个元素。这就是为什么transaction_list[0]在文件末尾给你一个IndexError的原因。

有几种不同的方法可以解决这个问题。保持接近目前的代码,你可以调整你的while循环的条件来寻找transaction是一个空字符串(而不是用一个空格的字符串),并先读一行:

transaction = sales.readline() # read first line 
while transaction != "": 
    # do stuff with non-empty transaction line 

    transaction = sales.readline() # read next line 

然而,更自然方法来遍历行的文件是简单地直接在文件对象上使用for循环:

for transaction in sales: 
    # do stuff 

迭代这种方式将在文件的末尾自动停止。

0

你可以简单地检查是否通过调用if transaction_list:(用来检查是否存在任何项目)实际上是试图让transaction_list[0]避免IndexError之前就存在这样一个指数。

相关问题