读取文件时遇IndexError: list index out of range问题求助
解决读取文件第2行时的IndexError问题
嘿,我来帮你排查这个错误!你遇到的IndexError: list index out of range主要有两个核心原因:
问题根源
- 文件指针的位置陷阱:当你第一次调用
questions.readlines(0)[0]时,已经把文件内容读取了一遍,文件内部的指针直接跳到了末尾。第二次再调用questions.readlines(1)时,文件已经没有内容可读,返回的是空列表,这时候访问索引[1]自然会报错。 readlines()用法误解:这个方法的参数可不是「行号」,而是字节数——用来指定一次最多读取多少字节的内容,完全不能用来定位到某一行。
修复方案
最稳妥的做法是一次性把文件所有行读取到列表中,之后直接通过索引访问即可,彻底避开文件指针的问题。另外记得用with语句管理文件,不用手动关闭,更安全省心。
修改后的代码片段如下:
def business(): difficulty = input("Easy, Medium or Hard? ") if difficulty.lower() == "easy": # 兼容大小写输入,比如用户输Easy也能识别 score = 0 # 用with语句自动处理文件关闭,避免资源泄漏 with open("buseasyquestions.txt","r") as questions_file: questions = questions_file.readlines() with open("buseasyanswers.txt","r") as answers_file: answers = answers_file.readlines() # 处理第1题(列表索引从0开始,对应文件第1行) question1 = questions[0].split("1")[0] answer1 = answers[0].strip() # 去掉换行符,避免输出多空行 print(f"{answer1}\n2) revenue + costs") guess1 = int(input(f"{question1} ")) if guess1 == 1: score += 1 print("Correct! Next question...") else: print("Wrong, next question...") # 处理第2题(索引1对应文件第2行) if len(questions) >= 2: # 加个判断,防止文件行数不够再次报错 question2 = questions[1].split("2")[0] # 这里继续写第2题的逻辑就可以啦 else: print("没有更多题目了!")
额外提示
- 确保你的
buseasyquestions.txt确实有第2行内容,不然即使修复代码,还是可能因列表长度不够报错,所以加了len(questions)>=2的判断提前处理这种情况。 - 你的文件格式(比如第一行
What is the formula for PROFIT?1)用split("1")[0]提取问题文本是没问题的,记得第二行也要保持类似格式(比如xxxx?2),这样split("2")[0]才能正确拿到问题。
内容的提问来源于stack exchange,提问作者MiniMiloe
相关产品推荐
相关产品推荐

