TypeError: '_sre.SRE_Match'对象没有'__getitem__'属性
我现在遇到了这个错误,但不知道是什么意思。这是一个使用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]:
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)
提前感谢你的帮助!
2 个回答
8
你不能这样访问匹配的结果:
if parts[1]:
parts[1] = parts[1][:-1]
应该这样做:
if parts:
matched = parts.group(1)[:-1]
关于正则表达式匹配组的更多信息可以在 这里 找到
21
调用 re.match
的结果是一个 SRE_Match
对象,这个对象不支持用 []
这种方式来访问(也就是不支持 __getitem__
)。我想你想要的是
if parts is not None:
if parts.group(1):
<blah>
不过,parts.group(1)
是不可变的,也就是说你不能直接修改它,所以你需要再创建一个变量来保存你想要的更改。