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

Python银行账户管理代码运行报IndexError索引越界问题求修复

报错原因

触发IndexError的核心是你调用line.split(' ')切割文本行得到的列表li长度不足4,访问li[3]时发生数组越界。
常见触发场景:

  • accounts.txt存在空行、格式不符合要求的行(单行列数不足4个字段)
  • 字段之间存在多个空格、制表符,用split(' ')切割会生成空串,导致列表长度异常
  • 你原有代码的写入逻辑存在bug:所有账户数据未换行、末尾多留空格,下次读取时直接出现格式错误
  • 登录失败时你代码里的file.close()会触发未定义变量报错,同时破坏文件写入逻辑
修复方案

1. 读取逻辑优化

替换原main函数里读取文件的代码段,增加空行过滤、格式校验,适配多空格分隔场景:

def main():
    account = []
    n=0
    with open("accounts.txt") as file:
        for line in file:
            line = line.strip()
            # 跳过空行
            if not line:
                continue
            # 用默认split()按任意空白切割,自动过滤空串
            li = line.split()
            # 校验字段长度,避免越界
            if len(li) !=4:
                continue
            account.append(BankAccount(li[0],li[1],float(li[2]),float(li[3])))
            n += 1

2. 写入逻辑优化

替换原代码末尾写入文件的逻辑,修复数据不换行、文件关闭异常的问题:

if(i==n):
        print('invalid login')
    else:
        # 用with自动管理文件生命周期,无需手动调用close
        with open('accounts.txt','w') as file:
            j=0
            while j<n:
                # 每个账户单独占一行,末尾加换行符
                file.write(f"{account[j].getID()} {account[j].getPIN()} {account[j].getChecking()} {account[j].getSavings()}\n")
                j += 1
    # 删除原有的file.close()代码,避免未定义变量报错
    print('Thank you!!')

3. 初始文件格式要求

如果是首次运行没有accounts.txt,手动创建后按如下格式填写,每行对应一个账户的ID、PIN、活期余额、定期余额:

1001 1234 5000.0 20000.0
1002 5678 3200.5 15000.0

内容的提问来源于stack exchange,提问作者Chinchillin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:54:06