请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

[问题] 为什么我自己重构的代码会出现KeyError,找不到字典,很费解.

view_models\book.py里的问题

"""
数据解析层
"""

class BookViewModel:
    def __init__(self,data):
        self.data = data
        self.book = {
            'title':data['title'],	#问题:出现KeyError: 'title'
            'publisher': data['publisher'],
            'pages':  data['pages'] or '',
            'author': '、'.join( data['author']),  # .join() 代表连接
            'price':  data['price'],
            'summary':  data['summary'] or '',
            'image':  data['image']
        }

    def package_single(self,keyword):
        returned = {
            'books': [],
            'total': 0,
            'keyword': keyword
        }
        if self.book:
            returned['total'] = 1
            returned['books'] = [self.book]
        return returned

    def package_collection(self,keyword):
        returned = {
            'books': [],
            'total': 0,
            'keyword': keyword
        }
        if self.book: #问题:一开始以为这里的问题,然后我把这个if的注释掉了,但是还是出现了KeyError: 'title'的错误
            returned['total'] = self.data['total']
            returned['books'] = [self.book for book in self.data['books']] #问题:这里的循环可能有写法问题,但是数据没有传入,我没办法解决这个问题
        return returned

以上是我重构代码的方案,这个方案没有之前重构spider里的yushu_book好,但是我是按照自己的思路来重构的.

1.最主要的问题是访问关键词查询后,构造函数中的self.book={‘title’:data[‘title’]}出现KeyError的报错,而且,只有关键字的索引会出现这样的问题,用isbn的索引不会出现问题,都是调用构造函数里的self.book{},为什么一个正常显示,一个出现差找不到字典,

我尝试了很多解决办法,包括断点调试和print()等方法,一步一步的排查,但很难理解,同样两个类方法,调用同一个实例变量,出现的结果竟然完全不同,.

使用的查询参数是:
ISBN查询:http://localhost:88/book/search/?q=9787070511209
图片描述

图片描述

2.因为我是按照自己的思路去重构代码,我会按照课程的代码重新敲一遍,.课程继续下去,但是不找到问题核心,感觉自己的思路出现了阻断.不知道我是哪一步写错了?

3.我把代码打包上传,麻烦老师有空查看下,主要模块为
视图函数模块:app\web\book.py
HTTP访问模块:spider\yushu_book.py
视图模型:view_models.py

不知道代码的传递方式.就用最笨的方法了

正在回答 回答被采纳积分+3

1回答

7七月 2020-01-23 20:47:23

这样的问题虽然你描述了很多但是我很难帮你定位问题,你需要 把问题稍微规整一下,直接描述问题的核心

0 回复 有任何疑惑可以回复我~
  • 提问者 不明生物s #1
    这个最主要的问题在于,我用ISBN访问,不会报任何错误,用关键词参数搜索,会出现数据库接收空白.,最直接的显示报错就是,
    构造函数当中
    self.book = {
                'title':data['title'],	#问题:出现KeyError: 'title'
    
    可是为啥我用ISBN搜素就没有问题,所以非常的费解
    回复 有任何疑惑可以回复我~ 2020-01-24 01:07:51
  • 7七月 回复 提问者 不明生物s #2
    这个需要调试,一步步的跟踪变量的值得变化来分析,应该很容易找到答案。
    回复 有任何疑惑可以回复我~ 2020-01-24 16:29:10
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信