Python: "Unbreakable" 已退出无限循环

Python: "Unbreakable" infinite loop was exited

我正在使用 RuuviTag 蓝牙传感器记录数据,该传感器将温度值发送到我的 RaspberryPi。

根据 RuuviTag Python 库文档,我应该使用函数 RuuviTagSensor.get_datas(handle_data),它会启动函数 handle_data() 的无限循环。 就我而言,我将其设计为:

def handle_data(found_data):
    temperature_measurement = found_data[1]['temperature']
    publish_via_mqtt(temperature_measurement)

我把它全部包在了:

while True:
    try:
        RuuviTagSensor.get_datas(handle_data)
    except Exception:
        logger.exception(f"An error occurred at {datetime.now(timezone.utc)}")
        reconnect_mqtt()

然而,一夜之间,我断了...

日志说:

INFO:ruuvitag_sensor.ble_communication:Problem with hciconfig reset. Retry reset.
INFO:ruuvitag_sensor.ble_communication:Problem with hciconfig reset. Retry reset.
INFO:ruuvitag_sensor.ble_communication:Problem with hciconfig reset. Retry reset.
INFO:ruuvitag_sensor.ble_communication:Problem with hciconfig reset. Exit.

所以 RaspberryPi 似乎遇到了蓝牙问题并尝试与 Ruuvis 重新连接......当这 3 次都不起作用时,他只是 EXITED PYTHON?我对么?如果退出或处理此退出,是否有重新启动整个脚本的方法?

在库 code 中,如果在尝试三次后仍无法启动传感器,则调用 exit(1)

调用 exit raises the SystemExit exception. SystemExit 不继承自 Exception,因此不会被问题代码中的 try/except 块捕获。根据项目的自述文件,这种行为似乎是故意的:

In case of errors, application tries to exit immediately, so it can be automatically restarted.

如果您想强制库继续重试,可以在程序中捕获 SystemExit (except SystemExit:)。