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
相关产品推荐
相关产品推荐

