Python valueError:处理json文件时对关闭的文件执行I/O操作

Python valueError:处理json文件时对关闭的文件执行I/O操作,python,json,Python,Json,with是python中的上下文管理器。它确保检查要打开的文件请求是否存在,如果存在,则运行下一个代码块/代码段。完成这段代码后,上下文管理器将关闭与文件的连接 在您的情况下,将代码更改为以下内容 导入操作系统 类crud(文件): def _uinit _;(self,filename='c.json'): 如果os.path.isfile(文件名): self.file=open(文件名“w”) 否则,在“crud.add”方法的第行temp=self.file\u data[“conta

with
是python中的上下文管理器。它确保检查要打开的文件请求是否存在,如果存在,则运行下一个代码块/代码段。完成这段代码后,上下文管理器将关闭与文件的连接

在您的情况下,将代码更改为以下内容

导入操作系统
类crud(文件):
def _uinit _;(self,filename='c.json'):
如果os.path.isfile(文件名):
self.file=open(文件名“w”)

否则,在“crud.add”方法的第行
temp=self.file\u data[“contacts”]
,python解释器将导致错误,因为打开的文件,在
with
上下文完成后立即关闭。

类似于该文件将在
with
块离开后立即关闭。请共享此.json文件的示例数据以及带有Traceback的完整错误消息这些是c.json文件{“contacts”:[{“name”:“rock”中的数据,“电话”:“256555”,“电子邮件”:abc@gmail.com},{“姓名”:“约翰”,“电话”:“645485548454”,“电子邮件”:空}}谢谢,但是文件数据出现了另一个错误。@docXt请共享完整的错误消息。attributeError:crud对象没有属性文件数据您继承的是
文件
类,但也重新定义了
初始化
,因此
self.file\u数据
将不存在。在
crud
中添加一行
super()。检查是否应该在add()中编写代码以在c.json中追加文件?
import json

class file:
    def __init__(self,filename='c.json'):
        with open(filename,'r') as f:
            self.file_data = json.load(f)
    def __repr__(self):
        return f"{self.file_data}"
class crud(file):
    def __init__(self,filename='c.json'):
        with open(filename, 'w') as f:
            self.file = f
    #adding data
    def add(self,data):
        json.dump(data,self.file,indent=4)
        temp = self.file_data["contacts"]
        temp.append(data)



d = {"name": None, "phone": None, "email": None}

f =crud()
f.add(d)