《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()
修复关键点说明
- 新增对空文件的检查:先读取文件内容并去除空白字符,若为空则返回
None - 扩展异常捕获:除了
FileNotFoundError,还捕获JSONDecodeError,确保文件内容无效时也能正常进入新建用户名流程 - 改用
json.loads():先读取文件内容再解析,比直接用json.load()更灵活处理空文件场景
内容的提问来源于stack exchange,提问作者TonnyLin
相关产品推荐
相关产品推荐

