【问题标题】:If statement works on Python 2 but not on python 3if 语句适用于 Python 2 但不适用于 Python 3
【发布时间】: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


【解决方案1】:

感谢“poke”和“DeepSpace”的解决方案是写

message.payload.decode()

因为负载是字节而不是字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多