[英]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.