类型错误:“sre.sre\u Match”对象没有属性“getitem”

2024-04-29 16:55:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在遇到这个错误,不知道是什么意思。这是一个蹩脚的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)

提前谢谢你的帮助!


Tags: infrompyimportselfsettings错误line
2条回答

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

        if parts[1]:
            parts[1] = parts[1][:-1]

而是这样做

        if parts:
            matched = parts.group(1)[:-1]

有关regex匹配组的详细信息here

一个re.match调用的结果是一个SRE_Match对象,它不支持[]运算符(也称为__getitem__)。我想你想要

if parts is not None:
    if parts.group(1):
        <blah>

不幸的是,parts.group(1)是不可变的,因此您必须创建另一个变量来保存您要对其进行的更改。

相关问题 更多 >