Python MQTT:TypeError:强制转换为Unicode:需要字符串或缓冲区,找到bool

时间:2013-10-26 21:19:31

标签: python unicode typeerror mqtt mosquitto

当我的python代码尝试连接到MQTT代理时,它会给我这个类型错误:

更新 - 我添加了完整错误

Traceback (most recent call last):
  File "test.py", line 20, in <module>
    mqttc.connect(broker, 1883, 60, True)
  File "/usr/local/lib/python2.7/dist-packages/mosquitto.py", line 563, in connect
    return self.reconnect()
  File "/usr/local/lib/python2.7/dist-packages/mosquitto.py", line 632, in reconnect
    self._sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0))
  File "/usr/lib/python2.7/socket.py", line 561, in create_connection
    sock.bind(source_address)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
TypeError: coercing to Unicode: need string or buffer, bool found

python文件的代码是:

#! /usr/bin/python
import mosquitto
broker = "localhost"
#define what happens after connection
    def on_connect(rc):
        print "Connected"
#On recipt of a message do action
    def on_message(msg):
        n = msg.payload
        t = msg.topic
        if t == "/test/topic":
            if n == "test": 
        print "test message received"

# create broker
mqttc = mosquitto.Mosquitto("python_sub")
#define callbacks
mqttc.on_message = on_message
mqttc.on_connect = on_connect
#connect
mqttc.connect(broker, 1883, 60, True)
#Subscribe to topic
mqttc.subscribe("/test/topic", 2)

#keep connected
while mqttc.loop() == 0:
    pass    

我不知道为什么它会在2天前给我这个工作。

1 个答案:

答案 0 :(得分:1)

我的猜测是你正在使用Debian测试。用于mosquitto的Debian软件包最终从旧的0.15升级到1.2.1。 1.0的一个变化是API的重新安装。

这意味着您的通话

mqttc.connect(broker, 1883, 60, True)

应该成为

mqttc.connect(broker, 1883, 60)

原始调用中的True设置了clean_session参数,该参数被视为客户端的属性(因此已移至Mosquitto()构造函数)而非连接参数。

1.2版将bind_address参数添加到connect()调用中。这需要一个字符串,因此你需要一个字符串但有一个bool的错误。

你可能会觉得有用的其他东西 - 如果你没有在你的例子中指定客户端ID(python_sub),那么mosquitto模块将为你生成一个随机id并且给出一个较小的机会经纪人碰撞。