Paho MQTT on_publish回调报错:'int'对象无'topic'属性
问题原因及解决办法
原因
Paho MQTT的on_publish回调函数参数定义错了。这个回调的标准参数是client, userdata, mid,第三个参数mid是整数类型的消息ID,不是on_message回调里的msg消息对象。你应该是把on_publish的参数写成了和on_message一样的(client, userdata, msg),触发回调时,整数类型的mid被当成msg对象来访问topic属性,自然会抛出'int' object has no attribute 'topic'的异常。
解决办法
- 修正
on_publish的参数定义,改成标准格式:def on_publish(client, userdata, mid): # 示例:用mid确认消息发布状态 print(f"消息ID {mid} 已成功发布") - 如果需要在发布成功后获取消息的topic、内容等信息,别指望
on_publish的参数——你可以在调用client.publish()时,把topic、payload等信息存到全局变量、类实例属性或者userdata里,之后在on_publish中通过mid关联对应的消息信息(比如维护一个mid到消息详情的字典)。
内容的提问来源于stack exchange,提问作者deputy-chief-hardy
相关产品推荐
相关产品推荐

