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

开发JSON投票系统时遭遇JSONDecodeError错误求助

问题分析与解决方法

错误原因

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 本质是要读取的JSON文件为空或者格式无效,你的代码存在两个核心问题导致该错误:

  • 首次运行时,若poll.json不存在或为空文件,json.load(f)因无有效JSON内容触发解析错误
  • 第二个代码块用"w"模式打开文件时,该模式会直接清空文件内容,后续调用json.load(fe)读取空文件必然报错

修复后的代码

import json

def poll():
    # 处理文件不存在/为空的情况,初始化投票数据
    try:
        with open("poll.json", "r") as f:
            poll_data = json.load(f)
    except (FileNotFoundError, json.JSONDecodeError):
        # 自定义初始投票选项,可按需修改
        poll_data = {"Python": 0, "Java": 0, "C++": 0}
        with open("poll.json", "w") as f:
            json.dump(poll_data, f)

    # 展示投票选项并获取用户输入
    print("What would you like to vote?")
    for option in poll_data.keys():
        print(f"- {option}")
    user_input = input("Please write: ")
    
    if user_input not in poll_data:
        print("Key not found.")
        return False

    # 修改投票数据并写入文件
    poll_data[user_input] += 1
    with open("poll.json", "w") as f:
        json.dump(poll_data, f, indent=4)  # 格式化JSON,提升可读性
    
    print("Voted!")
    return True

poll()

关键修改点

  • 异常处理机制:捕获文件不存在、JSON解析失败的异常,自动初始化投票数据并写入文件
  • 优化读写逻辑:先将数据读取到内存,修改完成后再一次性写入文件,避免写入模式清空文件后读取的错误
  • 友好的选项展示:将投票选项逐行打印,替代原有的直接打印keys()对象的生硬输出
  • 格式化JSON输出:添加indent=4参数,让生成的JSON文件结构更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:31:03