Python使用STOMP接收消息筛选CA_MSG数据返回空列表问题
问题原因
原代码返回空列表是三个逻辑错误共同导致的:
- 结果列表
new_msg的初始化语句写在了for循环内部,每遍历一条消息就会清空之前已经存入的匹配结果,即使匹配到数据也无法留存。 m.keys()返回的是字典键的视图对象,属于集合类结构,和字符串'CA_MSG'做相等判断永远返回False,判断条件从根本上无法触发。- 需求是匹配所有开头带CA_MSG标签的数据,原逻辑用完全相等判断,本身也不符合前缀匹配的要求。
正确实现代码
首先在循环外部初始化结果存储列表,遍历每条消息时检查字典内是否存在以CA_MSG为前缀的键,匹配成功就将整条消息存入结果:
import json # 解析STOMP协议返回的消息体 msg = json.loads(frame.body) new_msg = [] for single_msg in msg: for key in single_msg.keys(): if key.startswith("CA_MSG"): new_msg.append(single_msg) # 单条消息只要匹配到目标前缀键就终止检查,避免重复添加 break
如果需要更简洁的写法,可以用列表推导式实现相同逻辑:
new_msg = [ single_msg for single_msg in msg if any(key.startswith("CA_MSG") for key in single_msg.keys()) ]
内容的提问来源于stack exchange,提问作者SHexter
相关产品推荐
相关产品推荐

