【发布时间】:2017-05-29 19:09:10
【问题描述】:
我将它作为 MQTT 消息接收器的一部分,我正在尝试将代码移植到 Python 3,问题在于一些 if,else 语句,它们在 Python 3 上完全没有任何作用,例如这个,
if message.topic == "ledDoorSW_mqtt":
if str(message.payload) == "1":
device.setPinHigh(13)
elif str(message.payload) == "0":
device.setPinLow(13)
我了解每个版本处理字符串的方式存在根本差异,但在这里找不到原因。
任何帮助表示赞赏!!.. 谢谢..
【问题讨论】:
-
这些实际上是由我控制的,在代码的其他部分,我决定哪些字符串应该是主题和有效负载。
-
将
print(message.topic) ; print(type(message.topic)) ; print(message.payload) ; print(type(message.payload))的输出(恰好在第一个if之前和在Python 3 中,该代码可能无法按预期工作)添加到您的问题中。 -
我的猜测是
message.payload在 Python 3 中是一个bytes对象,而在 Python 2 中只是一个str。如果是这种情况,您需要先在 Python 中decode()它3. -
print(message.topic) > ledDoorSW_mqtt print(type(message.topic)) >
print(message.payload) > b'0' print(type(message.payload ))> -
正如我所说,您需要在 Python 3 中执行
message.payload.decode()。
标签: python-3.x mqtt