Python向空JSON文件写入灯具亮度数据触发JSONDecodeError如何解决?
问题排查及修复方案
核心报错原因
你初始的data.json是空文件,执行json.load()读取空内容时,无法解析出合法的JSON结构,直接抛出JSONDecodeError,这是触发报错的直接原因。
其他隐藏问题
- 误用Python内置关键字
dict作为变量名,属于不规范写法,容易触发后续隐藏错误 - 遍历灯具的循环内反复读写文件,性能开销大,完全没有必要
- 字典更新逻辑错误:每次生成的配置都带顶层
light键,调用update时如果已存在light键会直接覆盖整个light的值,最终只会保留最后一个灯具的配置,无法实现追加多个灯具的需求
修复后代码
import json def first_start(lamps: list): # 先处理文件读取逻辑,兼容空文件/不存在的文件 data = {} try: with open("data.json", "r") as file: data = json.load(file) except (json.JSONDecodeError, FileNotFoundError): # 文件不存在、为空、内容不合法都初始化为空字典 data = {} # 统一处理所有灯具配置 if "light" not in data: data["light"] = {} for lamp in lamps: data["light"][lamp] = {"brightness": 0} # 一次性写入文件 with open("data.json", "w") as file: json.dump(data, file, indent=2) # indent=2为可选参数,用来格式化JSON更易读
内容的提问来源于stack exchange,提问作者KaffeMitMilf
相关产品推荐
相关产品推荐

