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
相关产品推荐
相关产品推荐

