Python如何在if条件中添加嵌套字典字段含指定词的判断
Python WebSocket事件判断逻辑扩展方案
修改说明
- 保留原有guild_id、channel_id匹配规则,追加嵌套字段关键词校验
- 修复原代码笔误:原代码中
event('op')是错误的字典取值写法,应使用event['op'],否则心跳检测逻辑永远无法触发 - 增加边界判断,避免embeds、fields为空时触发索引/键错误
- 替换裸
except为具体异常捕获,避免吞掉所有报错影响问题排查
修改后完整代码
while True: event = recieve_json_response(ws) try: event_data = event['d'] # 匹配指定服务器和频道 if event_data['guild_id'] == "699288260479942686" and event_data['channel_id'] == "831878180586389514": # 校验第一个embed的第一个field的name字段是否包含session关键词 first_embed = event_data['embeds'][0] if first_embed['fields'] and 'session' in first_embed['fields'][0]['name'].lower(): print(event_data) # 处理心跳响应 op_code = event['op'] if op_code == 11: print('heartbeat received') except (KeyError, IndexError): # 仅捕获字段不存在、索引越界类异常,其余错误正常抛出方便排查 pass
细节说明
- 关键词匹配加了
.lower()做大小写兼容,可匹配Session/SESSION等不同大小写形式,如果需要严格大小写匹配,直接删除.lower()即可 first_embed['fields']的判断会自动跳过fields为空列表的情况,避免取[0]时触发索引越界- 把重复取值的
event['d']提取为变量event_data,减少重复字典取值操作
内容的提问来源于stack exchange,提问作者ArseneCC
相关产品推荐
相关产品推荐

