使用json.loads()遇JSONDecodeError,求用户分数追加功能修复方案
错误排查与修复方案
核心错误原因
- 非JSON格式导致解析失败:你写入文件的内容是
john = [5]这种Python赋值格式,不是合法的JSON字符串,json.loads()根本无法解析,直接触发JSONDecodeError。 - list.insert()参数错误:列表的
insert()方法需要两个参数(插入位置、元素),你只传了分数,运行到这一步还会触发TypeError。 - 未将修改后的内容写回文件:代码只修改了内存里的
lines列表,完全没把更新后的内容保存回文件,等于白改。 - 文件操作不规范:没有用
with语句管理文件句柄,可能出现文件未正确关闭的问题。
修复后的完整代码
import json import os # 占位参数 t = "A" fileSuffix = ".txt" score = 5 name = "john" fileName = t + fileSuffix # 初始化文件(如果不存在则创建空的JSON结构) if not os.path.exists(fileName): with open(fileName, "w", encoding="utf-8") as f: # 用字典存储用户-分数列表的映射,符合JSON格式 json.dump({}, f) # 读取文件中的用户数据 with open(fileName, "r", encoding="utf-8") as f: user_scores = json.load(f) # 更新分数 if name in user_scores: # 追加分数到列表末尾,用append更合适;如果要指定位置用insert(索引, score) user_scores[name].append(score) print("用户已存在,分数已追加") else: user_scores[name] = [score] print("用户不存在,已新增用户并添加分数") # 将更新后的数据写回文件 with open(fileName, "w", encoding="utf-8") as f: json.dump(user_scores, f, indent=4)
关键修改说明
- 改用JSON字典存储数据:文件里存的是标准JSON格式,比如
{"john": [5, 8]},这样json.load()和json.dump()可以直接解析和写入,完全避免格式错误。 - 用with语句管理文件:自动处理文件打开/关闭,避免资源泄漏和写入异常。
- 简化逻辑:直接用字典的键值对管理用户和分数,不用逐行读取解析,代码更简洁可靠。
- 正确追加分数:用
append()直接在列表末尾加分数,如果你需要插入到指定位置,再用insert(索引, score)(比如insert(0, score)插在开头)。
内容的提问来源于stack exchange,提问作者shlex
相关产品推荐
相关产品推荐

