ConnectionError не определен — MQTT Paho на Python

Я использую приведенный ниже код для подключения к брокеру через WebSocket и SSL. Брокер защищен паролем. Мой код -

import paho.mqtt.client as mqtt
import ssl
import time

def on_connect(client, userdata, flags, rc):
    print("connected with result code "+str(rc))

def on_publish(client, userdata, mid):
    print("mid: "+str(mid))

client = mqtt.Client('device', transport = "websockets")
client.on_connect = on_connect
client.on_publish = on_publish

client.username_pw_set("login", "pass")
client.ws_set_options(path = "/logger")
client.tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED,
    tls_version=ssl.PROTOCOL_TLS, ciphers=None)

connection = False


print("Trying to connect ...")
client.connect(host = "mqtt.broker.io", port=443)
connection = True

for _ in range(5):
    time.sleep(1)
    client.publish("some/topic", "HELLO", qos=2)
    client.loop(1)

client.disconnect()

Ошибка, которую я получаю -

Попытка подключения ... подключение с кодом результата 0 Traceback (большинство последний звонок последний): файл "/home/souvik/GitLab/Embedded/demo_mqtt_auth.py", строка 30, в client.loop(1) Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1120, в цикле return self._loop(timeout) File "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1164, в _loop rc = self.loop_read() Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1556, в loop_read rc = self._packet_read() Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 2373, в _packet_read кроме ConnectionError как err: NameError: глобальное имя «ConnectionError» не определено

sleepiz_one на  hw-1929-диагностика [$!] на  (eu-west-1) заняла 6 секунд ❯ /bin/python /home/souvik/GitLab/Embedded/demo_mqtt_auth.py Попытка соединение ... соединение с кодом результата 0 Трассировка (последний вызов last): файл "/home/souvik/GitLab/Embedded/demo_mqtt_auth.py", строка 30, в client.loop(1) Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1120, в цикле return self._loop(timeout) File "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1164, в _loop rc = self.loop_read() Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1556, в loop_read rc = self._packet_read() Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 2373, в _packet_read кроме ConnectionError как err: NameError: глобальное имя «ConnectionError» не определено

Не слишком уверен, откуда я получаю исключение. Несмотря на то, что я получаю исключение, я вижу данные о брокере, поэтому я не уверен, что

Обновлено: я на paho-mqtt 1.6.1

🤔 А знаете ли вы, что...
В Python есть инструменты для тестирования кода, такие как библиотека unittest.


50
1

Ответ:

Решено

ConnectionError был добавлен в Python 3.3.

Вы используете Python 2.7, срок службы которого истек в течение 3 лет.

Возможно, вам повезет понизить версию paho-mqtt до версии до 1.6.0, так как это первая версия, в которой этот коммит ссылается на ConnectionError:

pip install paho-mqtt==1.5.1

или, альтернативно, до версии 1.6.1, которая утверждает, что «исправляет совместимость с Python 2.7»:

pip install paho-mqtt==1.6.1

Однако на самом деле вам следует прекратить использовать Python 2.7, так как он уже давно не поддерживается.