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

使用json.loads()遇JSONDecodeError,求用户分数追加功能修复方案

错误排查与修复方案

核心错误原因

  1. 非JSON格式导致解析失败:你写入文件的内容是john = [5]这种Python赋值格式,不是合法的JSON字符串,json.loads()根本无法解析,直接触发JSONDecodeError。
  2. list.insert()参数错误:列表的insert()方法需要两个参数(插入位置、元素),你只传了分数,运行到这一步还会触发TypeError。
  3. 未将修改后的内容写回文件:代码只修改了内存里的lines列表,完全没把更新后的内容保存回文件,等于白改。
  4. 文件操作不规范:没有用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:05:21