You need to enable JavaScript to run this app. Python程序实现JSON文件存在不操作、不存在写入输入,输入时报错
优惠活动
大模型
产品
解决方案
定价
更多

Python程序实现JSON文件存在不操作、不存在写入输入,输入时报错

Python JSON写入代码报错原因与修复方案

你遇到的报错实际发生在输入完成后的JSON序列化写入阶段,并非输入函数本身的问题。

核心报错原因

  • json.dump()参数顺序颠倒:该方法的调用规范为json.dump(待序列化的Python数据, 可写的文件对象),你代码中写的json.dump(e,a),错误地将文件对象e作为待序列化数据、用户输入的字符串a作为文件句柄传入,运行时会直接抛出TypeError,提示待序列化对象无法转换、或传入的“文件对象”不存在write方法。
  • 打开的文件句柄未手动关闭,存在资源泄漏风险。
  • 文件已存在的分支中,打开的只读文件句柄也未关闭,属于不规范写法。

最小改动修正版(保留原有try-except逻辑)

只需调整参数顺序、补加文件关闭逻辑即可符合原需求:

import json
name = "first.json"
try:
    r = open(name)
    r.close()
except FileNotFoundError:
    e = open(name, "w")
    a = input("Enter Name: ")
    # 修正参数顺序:先传入要写入的用户输入,再传入可写文件对象
    json.dump(a, e)
    e.close()

更规范的推荐写法

采用os.path.exists判断文件是否存在、配合with上下文管理器自动处理文件关闭,避免手动管理文件句柄的疏漏,同时补充中文兼容参数:

import json
import os

name = "first.json"
if not os.path.exists(name):
    user_input = input("Enter Name: ")
    # with语句会自动在操作完成后关闭文件,无需手动调用close
    with open(name, "w", encoding="utf-8") as f:
        # ensure_ascii=False可避免中文被转义为Unicode编码,写入内容更直观
        json.dump(user_input, f, ensure_ascii=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 20:15:06