2013-10-26 173 views
-2

我有一个从YouTube视频的Python代码copypasta'd应该基本上允许我从RSS提要中提取标题和链接。IndexError:列表索引超出范围(Python)

import urllib.request 
import re 

webpage= urllib.request.urlopen("http://feeds.feedburner.com/JohnnyWebber?format=xml").read() 

heading = re.compile(b'<title>(.*)</title>') 
link = re.compile(b'<link>(.*)</link>') 

findheading= re.findall(heading,webpage) 
findlink = re.findall (link,webpage) 

lists=[] 
lists[:]=range(2,16) 

for i in lists: 
    print (findheading[i]) 
    print (findlink[i]) 
    print ("\n") 

我收到错误

print (findheading[i]) 

编辑:

另一个问题,以下unutbu的回答后,我已经能够得到输出,但它像

b'HEADING' 
b'TITLE' 

但如果我从正则表达式中删除b,那么我得到一个错误,因为使用字符串状物体一字节的

+0

你使用的是什么版本的Python? –

+2

@GamesBrainiac:这里几乎不重要,是吗? Python 3,由'urllib.request'库来判断。 –

回答

3

lists[:]=range(2,16)创建号码从2至15的列表:

In [11]: range(2, 16) 
Out[11]: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 

错误意味着存在在findheadings少于16个元件。


因此,而不是依靠任意假设有元素的一定数量的findheadings,在Python更习惯使用

for heading in findheadings 

遍历的findheadings的元素。 heading将 分配给findheadings中的一个值,每次通过循环。


要遍历都findheadingfindlink,使用zip

for heading, link in zip(findheading, findlink): 
    print(heading) 
    print(link) 

注意,如果在findheadingfindlink不同数量的元素,然后zip会当有没有更多的元素停止两者中较短的一个。如果你想迭代直到两者都用尽,使用itertools.zip_longest

相关问题