2013-03-09 75 views
0
urllist = ['http://example.com', 
      'http://example1.com'] 
i = 0 
while i < len(urllist): 
    source = urllib.urlopen(urllist[i]).read() 
    regex = '(\d{3})/">(\w+\s-\s\w+)</a>' # e.g. '435', 'Tom-Jerry' 
    p = re.compile(regex) 
    db = re.findall(p, source) 
    db = [tuple(filter(None, t)) for t in db] 

    hero_id = [] 
    for i in db: 
     hero_id.append(i[0]) 

    i += 1 
print hero_id 

db = [tuple(filter(None, t)) for t in db]db是這樣的元組的列表:[('564', 'Tom', 'Jerry'), ('321', 'X-man', 'Hulk')]類型錯誤:只能級聯元組(未「INT」)到元組

這背後的邏輯應爲以下:用urllist[0]剛開始時,搜索正則表達式,收集db,在db每個元組,採取從數組的元素[0](數量),並追加到hero_id列表。當你做了,加1到iurllist重複整個過程爲下一個網址,同時是沒有的左邊。

當我運行這段代碼,我得到這個:

i += 1 TypeError: can only concatenate tuple (not "int") to tuple

i += 1中的代碼外的for循環使此異常驚喜我一點點。想法?

回答

2

for循環for i in db:正在更改while循環內的值i。在for循環中使用不同的(更具描述性的)名稱。

2

的「對於i在分貝」循環的元組分配至i。我的範圍是函數(或模塊,如果這是模塊範圍的代碼)。

在Python 2的唯一循環語法有它自己的範圍是發電機表達。

+0

非常感謝你們。看似簡單,但永遠不會想出來。這當然有用;還有第二個問題。它追加(到'hero_id'列表)只有來自'urllist'第二個網址的數字嗯...我猜'append'方法首先從第一個鏈接附加數字,然後從第二個網址發佈它們和附加數字。任何不同的方法的想法可能? – nutship 2013-03-09 20:44:01

+1

列表中的項目未被刪除。相反,您的循環會在循環中第二次創建一個新的空列表。這本身對第一次創建的第一個列表沒有幫助,第一次通過。然而,因爲名字「hero_id」現在被綁定到不同的列表,並且沒有名字被綁定到第一個列表,所以你不能再獲得第一個列表(並且它將被垃圾收集)。如果你想讓列表中的所有id結束,只需將hero_id = []行移出循環 – 2013-03-09 23:45:28

相關問題