python - '_sre.SRE_Match' 对象不可下标
问题描述
我有以下语法,但每当在 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)
解决方案
你的线路在这里:
if not {parsed_host[0]}.issubset(parsed_saved_host.group(1).split(',')):
尝试访问 的项目0
,parsed_host
一个Match
对象。
由于该Match.__getitem__()
方法是根据文档从 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。
推荐阅读
- ruby-on-rails - 是否可以将 Rails authenticate_with_http_token 与 Roda 应用程序一起使用?
- html - 利用背景颜色
- sql - 创建表中的 SQL 错误:缺少括号
- r - 在 R 中创建 PatientID
- python - 当作为脚本调用时,pdb 附加在子进程上
- excel - 如何在excel中选择字符串中的单元格范围?
- excel - 带参数的子产生错误(编译错误:需要常量表达式)
- python - 将 PNG 或 JPEG 图像转换为 GAN 算法接受的格式
- haskell - 如何将函数调用的值存储到变量中
- node.js - 在生产环境中运行 React 或 Node js 应用程序