You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取文件时遇IndexError: list index out of range问题求助

解决读取文件第2行时的IndexError问题

嘿,我来帮你排查这个错误!你遇到的IndexError: list index out of range主要有两个核心原因:

问题根源

  1. 文件指针的位置陷阱:当你第一次调用questions.readlines(0)[0]时,已经把文件内容读取了一遍,文件内部的指针直接跳到了末尾。第二次再调用questions.readlines(1)时,文件已经没有内容可读,返回的是空列表,这时候访问索引[1]自然会报错。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:40:07