Python 3.x If语句适用于Python 2,但不适用于Python 3

Python 3.x If语句适用于Python 2,但不适用于Python 3,python-3.x,mqtt,Python 3.x,Mqtt,我将此作为MQTT消息接收器的一部分,并尝试将代码移植到Python3,问题在于一些if,else语句,它们在Python3上完全不起作用,例如 if message.topic == "ledDoorSW_mqtt": if str(message.payload) == "1": device.setPinHigh(13) elif str(message.payload) == "0": device.setPinLow(13) 我理解在每

我将此作为MQTT消息接收器的一部分,并尝试将代码移植到Python3,问题在于一些if,else语句,它们在Python3上完全不起作用,例如

if message.topic == "ledDoorSW_mqtt":
    if str(message.payload) == "1":
        device.setPinHigh(13)
    elif str(message.payload) == "0":
        device.setPinLow(13)
我理解在每个版本处理字符串的方式上存在根本性的差异,但无法找出为什么会出现这种情况

感谢您的帮助!!。。 感谢..

感谢“戳”和“深度空间”,解决方案是写

message.payload.decode()
由于有效负载是字节而不是字符串。

多亏了“poke”和“DeepSpace”,解决方案是写入

message.payload.decode()

由于有效负载是字节而不是字符串。

这些实际上由我控制,在代码的其他部分,我决定哪些字符串应该是主题和有效负载。添加
print(message.topic)的输出;打印(键入(message.topic));打印(message.payload);打印(键入(message.payload))
(正好在第一个
if
之前,在Python 3中,该代码可能没有按预期工作)。我猜
message.payload
在Python 3中是
字节
对象,在Python 2中只是
str
。如果是这种情况,您需要在Python 3.print(message.topic)>ledDoorSW_mqtt print(type(message.topic))>print(message.payload)>b0'print(type(message.payload))>中首先使用
decode()
,正如我所说的,您需要在Python 3中使用
message.payload.decode()
,在代码的其他部分,我决定主题和负载应该是什么字符串;打印(键入(message.topic));打印(message.payload);打印(键入(message.payload))(正好在第一个
if
之前,在Python 3中,该代码可能没有按预期工作)。我猜
message.payload
在Python 3中是
字节
对象,在Python 2中只是
str
。如果是这种情况,您需要在Python3.print(message.topic)>ledDoorSW_mqtt print(type(message.topic))>print(message.payload)>b0'print(type(message.payload))>中首先执行
message.payload.decode(),正如我所说,您需要在Python3中执行
message.payload.decode>。