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

Python读取JSON文件首次运行或内容为空时崩溃的解决方法

问题原因
  • 空文件不符合JSON语法要求,调用json.load()解析时会抛出json.JSONDecodeError异常,直接导致程序崩溃
  • 首次运行程序时,还可能遇到receipts.json文件不存在的情况,触发FileNotFoundError,原代码未做对应兼容
  • 原代码中手动调用file_receipts.close()是多余操作:with语句打开的文件会在代码块执行结束后自动关闭,不需要手动处理。
优化代码

核心处理逻辑是提前判断文件状态、捕获解析异常,遇到文件不存在、为空、内容非法的场景时,自动初始化空的收据字典,同时将合法的空JSON结构写入文件,避免后续运行重复报错。

import json
import os

receipts = {}
receipt_file_path = "receipts.json"

try:
    # 先校验文件存在且文件大小大于0,再执行读取解析
    if os.path.exists(receipt_file_path) and os.path.getsize(receipt_file_path) > 0:
        with open(receipt_file_path, "r", encoding="utf-8") as f:
            receipts = json.load(f)
    else:
        # 文件不存在/为空时,写入空字典作为初始合法JSON内容
        with open(receipt_file_path, "w", encoding="utf-8") as f:
            json.dump(receipts, f, ensure_ascii=False, indent=2)
except json.JSONDecodeError:
    # 文件存在但内容不是合法JSON时,重置为空字典并覆盖修复文件
    receipts = {}
    with open(receipt_file_path, "w", encoding="utf-8") as f:
        json.dump(receipts, f, ensure_ascii=False, indent=2)
优化点说明
  • 覆盖了所有会导致加载崩溃的场景:文件不存在、文件为空、文件内容为非法JSON格式
  • 异常场景下会自动修复JSON文件内容,写入合法的空字典结构,后续程序运行可以正常读写
  • 移除了冗余的手动关闭文件逻辑,完全依托with上下文管理器管理文件资源
  • 读写时统一指定utf-8编码,避免Windows系统默认GBK编码导致的乱码问题
  • 写入JSON时开启ensure_ascii=False和缩进格式化,生成的文件可读性更强,中文内容不会被转义为Unicode编码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:33:33