Python 类型错误:'_sre.sre#u Match';对象没有属性'__获取项目';
我目前收到这个错误,不知道这是什么意思。这是一个粗糙的python项目,这是我看到的错误:Python 类型错误:'_sre.sre#u Match';对象没有属性'__获取项目';,python,scrapy,Python,Scrapy,我目前收到这个错误,不知道这是什么意思。这是一个粗糙的python项目,这是我看到的错误: File "/bp_scraper/bp_scraper/httpmiddleware.py", line 22, in from_crawler return cls(crawler.settings) File "/bp_scraper/bp_scraper/httpmiddleware.py", line 12, in __init__ if parts[1]: TypeEr
File "/bp_scraper/bp_scraper/httpmiddleware.py", line 22, in from_crawler
return cls(crawler.settings)
File "/bp_scraper/bp_scraper/httpmiddleware.py", line 12, in __init__
if parts[1]:
TypeError: '_sre.SRE_Match' object has no attribute '__getitem__'
守则:
import re
import random
import base64
from scrapy import log
class RandomProxy(object):
def __init__(self, settings):
self.proxy_list = settings.get('PROXY_LIST')
f = open(self.proxy_list)
self.proxies = {}
for l in f.readlines():
parts = re.match('(\w+://)(\w+:\w+@)?(.+)', l)
if parts[1]:
parts[1] = parts[1][:-1]
self.proxies[parts[0] + parts[2]] = parts[1]
f.close()
@classmethod
def from_crawler(cls, crawler):
return cls(crawler.settings)
提前感谢您的帮助 您无法访问匹配的结果,因为:
if parts[1]:
parts[1] = parts[1][:-1]
而是这样做,
if parts:
matched = parts.group(1)[:-1]
有关正则表达式匹配组的更多信息调用
重新匹配
的结果是一个SRE\u match
对象,该对象不支持[]
运算符(也称\u getitem
)。我想你想要
if parts is not None:
if parts.group(1):
<blah>
如果零件不是无:
如果是零件组(1):
不幸的是,
parts.group(1)
是不可变的,因此您必须创建另一个变量来保存您要对其进行的更改。re.match
返回一个,它不会使[]
运算符过载。你的意思是说re.findall
吗?在Python3.6中,这应该是可行的(请参阅),你可以摆脱不是无的部分<代码>如果部分
与相同,如果部分不是无
。我选择在Python代码中尽可能明确<代码>如果部分与如果部分不是无
完全相同;前者测试部分
的当前布尔解释是否为真
,而后者明确测试部分
的值是否为无
。在本例中,它们的计算结果是相同的,但我不希望教读者在将来的情况下不起作用的快捷方式。在Python 3.6中不再是这种情况,您可以使用[]
,请参阅。