Python 类型错误:'_sre.sre#u Match';对象没有属性'__获取项目';

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

我目前收到这个错误,不知道这是什么意思。这是一个粗糙的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)

提前感谢您的帮助

您无法访问匹配的结果,因为:

        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中不再是这种情况,您可以使用
[]
,请参阅。