请稍等 ...
×

采纳答案成功!

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

调试后,关于IndexError: list index out of range的问题

这是我根据老师讲的和熊猫TV现在的HTML写的代码:
`import re
from urllib import request

class Spider():
url = 'https://www.panda.tv/cate/lol?pdt=1.24.s1.3.unl7kqgm1k
root_pattern = '

([\s\S]?)
'
name_pattern = '([\s\S.]?)'
number_pattern = ‘([\s\S.]*?)

# 1
def __fetch_content(self):
    r = request.urlopen(Spider.url)
    htmls = r.read()
    htmls = str(htmls, encoding='utf-8')
    return htmls

# 2
def __analysis(self, htmls):
    root_html = re.findall(Spider.root_pattern, htmls)
    anchors = []
    for html in root_html:
        name = re.findall(Spider.name_pattern, html)
        number = re.findall(Spider.number_pattern, html)
        anchor = {'name':name, 'number':number}
        anchors.append(anchor)
    return anchors

# 3
def __refine(self, anchors):
    l = lambda anchor: {
        'name': anchor['name'][0].strip(),
        'number': anchor['number'][0]
    }
    return map(l, anchors)

def go(self):
    htmls = self.__fetch_content()
    anchors = self.__analysis(htmls)
    result_map = self.__refine(anchors)
    result = list(result_map)
    print(result)

spider = Spider()
spider.go()`

下面贴的是上段代码运行的结果:图片描述

pycharm说的是lambda表达式那块有点问题,
然后我就把__refine(self, anchors)函数单独拿出来修改了一下,
用断点得到anchors的少量数据传到a图片描述结果符合预期
图片描述

老师是什么原因导致这个IndexError: list index out of range?
anchors是没有问题的:图片描述

正在回答

3回答

这个应该是数组越界,应该是[0]引起的吧?

0 回复 有任何疑惑可以回复我~
  • 提问者 Pre_Y #1
    那老师,如果是[0]引起的话我测试的代码应该也报错了,而不是正常显示?
    回复 有任何疑惑可以回复我~ 2019-02-12 08:34:10
  • 提问者 Pre_Y #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-02-12 12:16:01
提问者 Pre_Y 2019-02-12 12:36:05

总结一下:

1、分析HTML结构很重要

2、断点调试得熟练

3、编译器的报错肯定没问题,这时候就要分析利用断点分析自己的数据是否符合预期

0 回复 有任何疑惑可以回复我~
提问者 Pre_Y 2019-02-12 12:15:50

找到问题了,得到的anchors数据有点问题。

https://img1.sycdn.imooc.com//szimg/5c62485f00017e5a14850325.jpg

007的主播姓名为空,说明之前的正则表达式有问题,没有将主播姓名都筛选到。



0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信