首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'_sre.SRE_Match‘对象不可订阅

'_sre.SRE_Match‘对象不可订阅
EN

Stack Overflow用户
提问于 2018-09-19 11:18:37
回答 1查看 6K关注 0票数 6

我有下面的语法,但是在3.6中运行时总是会抛出错误:'_sre.SRE_Match‘对象是不可下标的,脚本在python3.6 3.7中工作得很好,在python3.6中是错误的。

代码语言:javascript
复制
if {host}.issubset(sg_data['hosts'].split(',')):
    saved_sg = [x for x in recorded_state if x['sg'] == sg_data['id'] and x['host'] == host][0]['data']
    dec_saved_data = json.loads(self.encryption.decrypt(saved_sg).decode())
    if sg_data['display_state'].lower() == 'offline':
        if dec_saved_data['display_state'].lower() != 'offline':
            yield from self.set_online(sg_data, host)
    else:
        parsed_host = re.search('^.*\((.*)\).*$', sg_data['display_state'])
        if sg_data['display_type'].lower() == 'parallel':
            if parsed_host:
                if not {host}.issubset(parsed_host.group(1).split(',')):
                    yield from self.set_online(sg_data, host)
        else:
            if dec_saved_data['display_state'].lower() == 'offline':
                yield from self.set_offline(sg_data, host)
            else:
                parsed_saved_host = re.search('^.*\((.*)\).*$', dec_saved_data['display_state'])
                if parsed_saved_host:
                    if not {parsed_host[0]}.issubset(parsed_saved_host.group(1).split(',')):
                        yield from self.set_switch(sg_data, host)

    if dec_saved_data['frozen'] != sg_data['frozen']:
        if dec_saved_data['frozen'] == 0 and sg_data['frozen'] > 0:
            yield from self.set_unfreeze(sg_data)
        elif dec_saved_data['frozen'] > 0 and sg_data['frozen'] == 0:
            yield from self.set_freeze(sg_data)

    current_sg_state = sg_data['display_state']
    lastest_sg_state = dec_saved_data['display_state']

    parsed_current_sg_state = re.search('^.*\((.*)\).*$', sg_data['display_state'])
    parsed_lastest_sg_state = re.search('^.*\((.*)\).*$', dec_saved_data['display_state'])

    if parsed_current_sg_state:
        current_sg_state = parsed_current_sg_state.group(1)

    if parsed_lastest_sg_state:
        lastest_sg_state = parsed_lastest_sg_state.group(1)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-19 11:38:42

你在这里的台词:

代码语言:javascript
复制
if not {parsed_host[0]}.issubset(parsed_saved_host.group(1).split(',')):

尝试访问项0 of parsed_host ( Match对象)。

由于Match.__getitem__()方法是在Python3.6根据文献资料实现后实现的,所以您的代码应该在Python3.6中工作,如果您收到了'_sre.SRE_Match' object is not subscriptable错误,这意味着您实际上不是使用Python3.6,而是使用更早的版本。

将行更改为:

代码语言:javascript
复制
if not {parsed_host.group(0)}.issubset(parsed_saved_host.group(1).split(',')):

这些代码适用于早期版本的Python。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52404656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档