Python TypeError:只能将元组(而不是“int”连接到元组 urlist=['http://example.com', 'http://example1.com'] i=0 而我(\w+\s-\s\w+”,例如“435”、“Tom Jerry” p=重新编译(正则表达式) db=re.findall(p,源) db=[tuple(filter(None,t))表示t,单位为db] 英雄id=[] 对于以db表示的i: 英雄id.append(i[0]) i+=1 打印英雄身份证

Python TypeError:只能将元组(而不是“int”连接到元组 urlist=['http://example.com', 'http://example1.com'] i=0 而我(\w+\s-\s\w+”,例如“435”、“Tom Jerry” p=重新编译(正则表达式) db=re.findall(p,源) db=[tuple(filter(None,t))表示t,单位为db] 英雄id=[] 对于以db表示的i: 英雄id.append(i[0]) i+=1 打印英雄身份证,python,python-2.7,Python,Python 2.7,db=[tuple(filter(None,t))for t in db]db是这样一个元组列表:[('564','Tom','Jerry'),('321','X-man','Hulk')] 这背后的逻辑应该是:从urlist[0]开始,搜索正则表达式,收集db,对于db中的每个元组,从元组(数字)中获取[0]元素然后将其附加到hero\u id列表中。完成后,在i中添加1,并在没有剩余url的情况下,对urlist中的下一个url重复整个过程 当我运行此代码时,我得到以下结果: i+=1 Ty

db=[tuple(filter(None,t))for t in db]
db
是这样一个元组列表:
[('564','Tom','Jerry'),('321','X-man','Hulk')]

这背后的逻辑应该是:从
urlist[0]
开始,搜索正则表达式,收集
db
,对于
db
中的每个元组,从元组(数字)中获取
[0]
元素然后将其附加到
hero\u id
列表中。完成后,在
i
中添加1,并在没有剩余url的情况下,对
urlist
中的下一个url重复整个过程

当我运行此代码时,我得到以下结果:

i+=1
TypeError:只能将元组(而不是“int”)连接到元组

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

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

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

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


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

db中i的for循环
while
循环中更改
i
的值for循环中的名称。

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

非常感谢大家。看起来很简单,但永远无法解决它。这当然有效;不过还有第二个问题。它是附加的(到
hero\u id
列表)只有来自
urlist
hmm的第二个url中的数字。我猜
append
method首先从第一个链接中追加数字,然后从第二个url中删除它们和追加的数字。可能有其他方法的想法吗?列表中的项目没有被删除。相反,您的循环第二次创建了一个新的空列表循环。这本身对您第一次创建的第一个列表没有任何影响。但是,由于名称“hero_id”现在绑定到另一个列表,并且不再有名称绑定到第一个列表,因此您无法再获得第一个列表(并且它将被垃圾收集)。如果您希望列表中包含所有id,只需将hero_id=[]行移出循环即可。非常感谢各位。看起来很简单,但永远无法解决它。这当然起作用;但还有第二个问题。它附加(到
hero_id
列表中)只有来自
urlist
hmm的第二个url中的数字。我猜
append
method首先从第一个链接中追加数字,然后从第二个url中删除它们和追加的数字。可能有其他方法的想法吗?列表中的项目没有被删除。相反,您的循环第二次创建了一个新的空列表循环。这本身对您第一次创建的第一个列表没有任何影响。但是,由于名称“hero_id”现在绑定到另一个列表,并且不再有名称绑定到第一个列表,因此您无法再获得第一个列表(并且它将被垃圾收集)。如果希望列表中包含所有id,只需将hero_id=[]行移出循环即可
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