Python调用open()存储JSON变量报错takes 0 positional arguments but 2 were given
错误产生原因
- 命名冲突:你自定义了名为
open的无入参函数,直接覆盖了Python内置的用于文件操作的open()函数。save()方法中调用open("Filen.json", "w")时传入了2个参数,和你自定义的无参open()函数参数数量不匹配,直接触发该类型错误。 - 附加代码问题:你在写入JSON时错误使用了
json.dumps()方法,该方法仅能将对象序列化为JSON字符串,无法直接写入文件对象,后续即使解决命名冲突也会触发参数错误。
修复方案
- 第一步:重命名自定义函数,避免和Python内置函数重名,例如将你的
open()函数改名为open_local_file(),如果项目其他位置有调用该自定义函数的地方同步修改名称即可。 - 第二步:替换JSON写入方法,将
json.dumps修改为json.dump,适配写入文件的场景。
修复后代码示例
import json import os import tkinter.filedialog as tfd # 此处省略btn1的初始化定义代码 file_name = "" def save(): global file_name with open("Filen.json", "w") as file: # 替换为json.dump写入文件 json.dump(file_name, file) # 自定义函数改名,避免覆盖内置open def open_local_file(): global file_name if file_name == "": file_name = tfd.askopenfilename() os.startfile(file_name) else: os.startfile(file_name) save() if btn1["text"] == "": btn1["text"] = file_name
内容的提问来源于stack exchange,提问作者FiolDoll
相关产品推荐
相关产品推荐

