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)