【发布时间】:2021-10-29 11:17:13
【问题描述】:
所以我创建了一个 ReturnedBook 类并希望记录一本被退回的书,这需要记录在 json 文件中(这个文件目前不存在,所以它需要创建然后在事后追加)
这是我的类和函数
returnedbooksJsonPath = 'returnedbooks.json'
class ReturnedBook(BookItem):
def __init__(self, book_id, returned_date):
self.__book_id = book_id
self.__returned_date = returned_date
def get_returned_date(self):
return self.__returned_date
def get_book_id(self):
return self.__book_id
def record_returned_book(self):
with open(returnedbooksJsonPath, 'a+') as returnedbooks:
data['returnedbooks'].append({
'book_id': self.__book_id,
'returned_date': self.__returned_date,
})
json.dump(data, returnedbooks, indent=4, default=str)
return "You have successfully returned the book"
r = ReturnedBook("32", datetime.now())
r.record_returned_book()
当我运行这段代码时,我得到一个 KeyError: returnedbooks
KeyError: 'returnedbooks'
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_18420/88328772.py in <module>
25
26 r = ReturnedBook("32", datetime.now())
---> 27 r.record_returned_book()
~\AppData\Local\Temp/ipykernel_18420/88328772.py in record_returned_book(self)
15 with open(returnedbooksJsonPath, 'a+') as returnedbooks:
16 header = [returnedbooks.readline().strip() for i in range(3)]
---> 17 data['returnedbooks'].append({
18 'book_id': self.__book_id,
19 'returned_date': self.__returned_date,
KeyError: 'returnedbooks'
我对 open 和使用 'a+' 的理解是,如果文件不存在,它会创建文件,然后附加数据?但是,查看此错误,它会创建文件,但由于文件为空白且文件中没有名为“returnedbooks”的列表/字典,因此没有写入任何内容?
请问我的功能哪里出错了?我需要事先创建一个名为returnbooks 的空列表吗?
提前致谢。
【问题讨论】:
-
data指的是什么? -
啊...所以我正在尝试在文件中创建该数据,本质上该文件目前不存在,所以我正在尝试创建它,然后将其添加到
-
不要使用以双下划线
__开头的类变量,这通常是不符合 Python 的。而是定义像book_id这样的变量,然后像ret_book.book_id那样访问它们,而不是为它创建一个方法。另一个常见的 Python 习惯用法是使用属性来返回内部属性,例如_book_id,但除非您想更改 ex 返回的 id。基于一个条件,那么我认为在这种情况下最好只使用简单的属性。 -
感谢您的评论,我正在通过我的大学学位学习这一点,双下划线以这种方式显示给我们,但现在很高兴知道。谢谢。 :-)