2013-10-26 229 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

相關問題