2016-04-10 159 views
0

我目前正試圖確保我的Python腳本保持活着狀態,無論它處於什麼狀態,因此我試圖捕獲所有異常並找到一個apropiate腳本響應。在我的腳本中的這一點上,我試圖捕獲連接到我的MQTT代理時可能發生的錯誤,即無法通過eth0插入Internet連接(1),或者(2) )路由器沒有互聯網接入。Python MQTT異常處理

錯誤消息1:

socket.gaierror: [Errno -5] No address associated with hostname 

和2的錯誤消息是:

socket.gaierror: [Errno -2] Name or service not known 

可悲的是,我還沒有捕捉到這些異常。這是我試過的那些:然而

def mqtt_listen(): 
     mqttc = mqtt.Client(machine_id, clean_session=False) 
     mqttc.username_pw_set(machine_id, mqtt_pwd) 
     mqttc.connect(mqtt_host, mqtt_port) 
     mqttc.subscribe(mqttc.topic, qos=1) 
     def on_connect(client, userdata, rc): 
       print " Attempting to connect to MQTT" 
       if rc != 0: 
         print "Unable to connect to MQTT: Connection refused. Error code (" + rc + ")" 
       elif rc == 0: 
         print "Connection to MQTT established." 
       else: 
         print "Unable to connect to MQTT: Socket error" 

看來,作爲例外(socket.gaierror)不是MQTT(PAHO)庫的一部分,我似乎無法抓住它。任何幫助將真正Appriciated它!

回答

1

套接字連接發生在mqttc.connect(),它的存在,你必須努力追趕你感興趣的除外。

on_connect回調rc參數是由MQTT經紀人在CONNACK消息中提供的價值,它與套接字無關。

+0

謝謝!你是對的。我不能相信我錯過了這一點。 – user5740843