Python用户姓名记忆工具加载JSON文件遇解析报错的问题咨询
报错触发原因解析
报错本身含义
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 表示JSON解析器读取目标文件时,从文件第0个字符位置起,未检测到任何合法的JSON结构。
结合当前代码的直接触发逻辑
- 触发前提为
usernames.json是空文件
空文件的生成路径完全由现有代码逻辑导致:- 首次运行程序时,
usernames.json不存在,触发loadnames函数的FileNotFoundError分支 - 该分支仅创建空的
usernames.json文件,未写入任何合法JSON内容,随后直接执行sys.exit()退出 - 第二次运行时,
usernames.json已存在(空文件),不会再触发FileNotFoundError分支,代码直接调用j.load(fo)读取空文件,此时解析器无有效内容可解析,抛出该报错。
- 首次运行程序时,
现有代码的其他潜在错误
- 写入逻辑生成非法JSON:
保存用户姓名时,代码循环调用j.dump(n, fo)向同一文件逐个写入姓名。若存在两个用户张三、李四,最终文件内容为"张三""李四",是两个连续的独立JSON字符串,不符合合法JSON数组的格式要求,后续读取时仍会触发解析错误。 - 异常覆盖不全:
loadnames函数仅捕获FileNotFoundError,未处理「文件存在但内容非法」的场景,遇到损坏的JSON文件时会直接抛出错误。
内容的提问来源于stack exchange,提问作者Aiden Choi
相关产品推荐
相关产品推荐

