Python - 遇到IndexError问题:列表索引超出范围

时间:2015-10-04 06:22:41

标签: python

提前感谢您的回答。我试图研究我自己对这个问题的答案几个小时没有用。我现在正在寻求建议而不是答案,因为这是大学的任务问题。

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

有一个变量(customerIDInput)来自另一个基本上是客户ID的函数。

我的程序应该逐行搜索记录,找到索引0中包含'customerIDInput'的每条记录。

我得到的错误是我假设的是循环的最后一次重复。指数超出范围。我最初认为这是最后一个(\ 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()

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

在实际尝试if transaction_list:以避免transaction_list[0]之前,您可以通过调用IndexError(检查其中是否有任何项目)来检查是否存在此索引。< / p>