类型错误:只能级联元组(未“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到i
和urllist
重复整个过程为下一个网址,同时是没有的左边。
当我运行这段代码,我得到这个:
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的唯一循环语法有它自己的范围是发电机表达。
非常感谢你们。看似简单,但永远不会想出来。这当然有用;还有第二个问题。它追加(到'hero_id'列表)只有来自'urllist'第二个网址的数字嗯...我猜'append'方法首先从第一个链接附加数字,然后从第二个网址发布它们和附加数字。任何不同的方法的想法可能? – nutship 2013-03-09 20:44:01
列表中的项目未被删除。相反,您的循环会在循环中第二次创建一个新的空列表。这本身对第一次创建的第一个列表没有帮助,第一次通过。然而,因为名字“hero_id”现在被绑定到不同的列表,并且没有名字被绑定到第一个列表,所以你不能再获得第一个列表(并且它将被垃圾收集)。如果你想让列表中的所有id结束,只需将hero_id = []行移出循环 – 2013-03-09 23:45:28