Python读取txt生成字典执行monthly命令报IndexError问题求助
问题排查与修复方案
错误根源
你遇到的IndexError由两处逻辑错误共同导致:
readFromFile函数逻辑错误:单行文本调用split()后已经得到了月份(key)和销售额(value)两个独立字符串,你后续又对单独的销售额字符串执行split(),导致字典中存入的value是长度为1的列表(比如'9762'变成['9762']),没有索引为1的元素。Monthly函数遍历逻辑错误:你遍历的是字典的values(),拿到的只有销售额数据,根本不存在月份信息,强行取row[1]必然触发越界,后续用row[0]、row[1]作为key查询字典的逻辑也和你设计的字典结构完全不匹配。
修复代码
FileIO模块readFromFile函数修复
def readFromFile(): with open(FILENAME, 'r', newline="") as file: myDict = {} for line in file: # 分割后直接转int存入,无需再对value做split key, value = line.split() myDict[key] = int(value) print(myDict) return myDict
主程序Monthly函数修复
def Monthly(mSales): # 遍历字典的键值对,直接拿到月份和对应销售额 for month, sales in mSales.items(): print(f"{month}\t{sales}") print()
其他开发建议
- 主程序中用到的
commands变量未定义,你需要提前定义合法命令列表,比如commands = ['monthly', 'yearly', 'edit', 'leave'],避免执行时报未定义错误。 - 后续开发
Yearly函数时,直接对字典的values求和即可得到年度总销售额,除以12就能得到月均销售额。 - 开发
Edit函数修改销售额后,记得调用writeToFile函数把修改后的字典写入文件,保证下次启动数据不丢失。 - 可以加异常捕获逻辑,比如读取文件时如果某行格式错误,跳过该行并提示,避免程序直接崩溃。
内容的提问来源于stack exchange,提问作者Cody Rice
相关产品推荐
相关产品推荐

