Я пытаюсь настроить клиент mqtt в python3.Это не первый раз, когда я делаю это, однако я столкнулся с довольно странным поведением.При попытке вызвать функцию, которая содержит ошибку, из одной из функций обратного вызова (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
При вызове func ()из основного я получаю правильную ошибку TypeError.Так что-то ловит это исключение в пахо.Я посмотрел на более старый проект (хотя python2) и попытался воссоздать поведение.Там исключение выдается правильно.Что мне не хватает?
EDIT Я могу поймать исключение, поместив вызов func () в блок try.Тем не менее, он не останавливает выполнение программы, когда не перехватывается.Я не понимаю, почему