类型错误:只能级联元组(未“INT”)到元组

问题描述:

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循环使此异常惊喜我一点点。想法?

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

的“对于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