gpt4 book ai didi

python - Paho MQTT Python 客户端 : No exceptions thrown, 刚刚停止

转载 作者:太空狗 更新时间:2023-10-30 02:15:09 25 4
gpt4 key购买 nike

我尝试在 python3 中设置一个 mqtt 客户端。这不是我第一次这样做,但是我遇到了一个相当奇怪的行为。当尝试从其中一个回调函数(on_connect 或 on_message)调用包含错误的函数时,python 不会抛出异常(至少不会打印),它只是停在那里。我将一个简短的例子放在一起,重现了这种行为。

有人有想法吗?

import paho.mqtt.client as mqtt

import re
import os.path

import json
from termcolor import colored

client = mqtt.Client()

def func():
test = 1 + "1"
print("Should never reach that")

def on_connect(client, userdata, flags, rc):
"""Establishes connection to broker
"""
print("Connected to broker with result code " + str(rc))
client.subscribe("test")

def on_message(client,userdata,msg):
print("Recieved message on " + msg.topic)
params = {}
if msg.topic == "test":

print("Invoke func")
func()

if __name__ == "__main__":
client.on_connect = on_connect
client.on_message = on_message

client.connect("localhost",1883,60)

client.loop_forever()

这是向主题“test”发送消息时的输出:

Connected to broker with result code 0
Recieved message on test
Invoke func

当从 main 调用 func() 时,我抛出了正确的 TypeError。所以有些东西在 paho 中捕获了这个异常。我查看了一个较旧的项目(尽管是 python2)并尝试重新创建该行为。在那里异常被正确抛出。我想念什么?

编辑我可以通过将 func() 调用放在 try block 中来捕获异常。然而,当没有被捕获时,它不会停止程序的执行。我不明白为什么

最佳答案

对于遇到此问题并想知道为什么不抛出或至少不可见 mqtt 回调中的所有异常的任何人:与 paho 的 python2 版本相比,客户端已经捕获了调用时发生的所有异常用户设置回调函数。然后将这个catch的输出输出到on_log回调函数。如果这不是由用户实现的,将不会有可见的输出。所以只需添加

def on_log(client, userdata, level, buff):
print(buff)

mqttc.on_log = on_log

到您的代码,打印出异常。

关于python - Paho MQTT Python 客户端 : No exceptions thrown, 刚刚停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52426852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com