繁体   English   中英

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

[英]Python - Having trouble with IndexError: list index out of range

预先感谢您的回答。 我试图研究我自己对这个问题的答案数小时但无济于事。 我现在正在寻求建议而不是答案,因为这是大学的作业问题。

我有一个程序将一组数据存储在单行记录中。 这保存在名为“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()

当您到达文件末尾时,文件对象上的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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM