web-dev-qa-db-ja.com

TypeError: '_ sre.SRE_Match'オブジェクトに属性 '__getitem__'がありません

現在このエラーが発生していますが、どういう意味かわかりません。そのかすれた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)

よろしくお願いします!

15
user3403945

_re.match_呼び出しの結果は、_SRE_Match_オブジェクトであり、_[]_演算子(別名___getitem___)をサポートしていません。私はあなたが欲しいと思います

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

残念ながら、parts.group(1)は変更できないため、変更を保持するために別の変数を作成する必要があります。

15
dg99

次のように一致した結果にアクセスすることはできません。

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

代わりに、これを行います

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

正規表現一致グループの詳細 ここ

5
shaktimaan