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')]

这背后的逻辑应该如下:从 开始urllist[0],搜索正则表达式,db为 中的每个元组收集 ,从元组(数字)中db取出[0]元素并将其附加到hero_id列表中。完成后,将 1 添加到i并重复下一个 url 的整个过程,urllist而没有剩下的。

当我运行这段代码时,我得到了这个:

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

i += 1in 代码在 for 循环之外,所以这个异常让我有点吃惊。想法?

4

2 回答 2

2

“for i in db”循环将一个元组分配给 i。i 的范围是函数(或模块,如果这是模块范围的代码)。

Python 2 中唯一有自己作用域的循环语法是生成器表达式。

于 2013-03-09T20:34:34.847 回答
2

for 循环for i in db:正在改变循环i内部的值while。在 for 循环中使用不同的(更具描述性的)名称。

于 2013-03-09T20:36:27.187 回答