【问题标题】:'_sre.SRE_Match' object is not subscriptable'_sre.SRE_Match' 对象不可下标
【发布时间】:2018-09-19 11:18:37
【问题描述】:

我有以下语法,但每当在 3.6 中运行时总是会抛出错误: '_sre.SRE_Match' 对象不可下标 脚本在 python3.7 中运行良好,但在 python3.6 中出错

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)

【问题讨论】:

标签: python python-3.6


【解决方案1】:

您的线路在这里:

if not {parsed_host[0]}.issubset(parsed_saved_host.group(1).split(',')):

尝试访问 parsed_host 中的项目 0Match 对象。

由于Match.__getitem__()方法是根据the documentation从Python 3.6开始实现的,你的代码应该可以在Python 3.6中运行,如果你遇到'_sre.SRE_Match' object is not subscriptable错误,这意味着你实际上并没有使用Python 3.6,但更早的版本。

将行改为:

if not {parsed_host.group(0)}.issubset(parsed_saved_host.group(1).split(',')):

并且该代码适用于早期版本的 Python。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2013-09-22
    • 2020-02-17
    • 2021-11-10
    • 2019-05-16
    • 2016-07-20
    相关资源
    最近更新 更多