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

《Python Crash Course》第10章JSON示例代码运行报错求助

解决Python JSONDecodeError: Expecting value错误

你遇到的JSONDecodeError: Expecting value是因为username.json文件已经存在,但内容为空或者不是有效的JSON格式。原代码只处理了文件不存在的情况,没覆盖文件存在但无法解析的场景。

临时快速解决办法

直接删除当前目录下的username.json文件,重新运行程序就行——程序会自动创建一个格式正确的JSON文件存储你的用户名。

修复后的完整代码

import json

def get_stored_username():
    """获取已存储的用户名(如果存在)"""
    filename = 'username.json'
    try:
        with open(filename) as f:
            # 先读取内容并去除空白字符,检查是否为空文件
            content = f.read().strip()
            if not content:
                return None
            username = json.loads(content)
    except (FileNotFoundError, json.JSONDecodeError):
        return None
    else:
        return username

def get_new_username():
    """提示用户输入新用户名"""
    username = input("你叫什么名字? ")
    filename = 'username.json'
    with open(filename, 'w') as f:
        json.dump(username, f)
    return username

def greet_user():
    """向用户问候"""
    username = get_stored_username()
    if username:
        print(f"欢迎回来,{username}!")
    else:
        username = get_new_username()
        print(f"我们会记住你,下次见,{username}!")

greet_user()

修复关键点说明

  1. 新增对空文件的检查:先读取文件内容并去除空白字符,若为空则返回None
  2. 扩展异常捕获:除了FileNotFoundError,还捕获JSONDecodeError,确保文件内容无效时也能正常进入新建用户名流程
  3. 改用json.loads():先读取文件内容再解析,比直接用json.load()更灵活处理空文件场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:10:07