Jerarquía de Excepciones
wedopy proporciona una jerarquía de excepciones estructurada y explícita para que puedas capturar y gestionar cualquier fallo de hardware o comunicación de forma precisa.
Todas las excepciones pueden importarse desde wedopy o desde wedopy.exceptions:
from wedopy.exceptions import (
WedoError,
BLEError,
HubConnectionError,
HubDisconnectedError,
OperationTimeout,
HubBusyError,
DeviceNotFoundError,
DeviceTypeError,
AmbiguousDeviceError,
InvalidStateError,
UnsupportedFeatureError,
)
🌳 Árbol Jerárquico
Exception
└── WedoError (Base para todas las excepciones de wedopy)
├── BLEError (Fallos de bajo nivel en transporte y Bluetooth)
│ ├── HubConnectionError (No se encontró el Hub o falló el emparejamiento)
│ ├── HubDisconnectedError (Pérdida inesperada de conexión BLE)
│ ├── OperationTimeout (Expiró el tiempo de espera de una operación)
│ └── HubBusyError (El bus BLE no pudo admitir la solicitud en este momento)
├── DeviceNotFoundError (No hay dispositivo conectado en el puerto especificado)
├── DeviceTypeError (El tipo de dispositivo en el puerto no coincide con el solicitado)
├── AmbiguousDeviceError (Múltiples dispositivos del mismo tipo sin indicar puerto)
├── InvalidStateError (Operación no válida en el estado actual del hub o planificador)
└── UnsupportedFeatureError (Característica no soportada por el firmware)
📋 Descripción Detallada
WedoError
Excepción base para todos los errores generados por la biblioteca. Si deseas capturar cualquier problema originado por wedopy, captura esta clase.
BLEError
Representa anomalías en la capa Bluetooth Low Energy (D-Bus, BlueZ o fallos de GATT).
HubConnectionError
Se lanza cuando hub.connect() o with Hub() no consigue encontrar ningún Smart Hub en modo anuncio (advertising) tras el tiempo límite de búsqueda (15 segundos por defecto), o si la negociación inicial de servicios GATT falla.
HubDisconnectedError
Se produce cuando el Smart Hub pierde el enlace de radio de forma involuntaria (por ejemplo, al agotarse las pilas o al alejarse demasiado del ordenador).
OperationTimeout
Se emite cuando una lectura o escritura BLE no recibe confirmación (ACK) dentro del tiempo de espera estipulado (por defecto 1.0 segundo).
HubBusyError
Se genera si la cola interna del coordinador BLE está saturada o si una operación colisiona con una orden de emergencia en curso.
DeviceNotFoundError
Se produce al invocar hub.motor(), hub.distance_sensor() o hub.tilt_sensor() sobre un puerto donde no hay ningún periférico conectado, o si se omite el puerto y no existe ningún dispositivo de ese tipo en todo el hub.
DeviceTypeError
Se produce cuando intentas acceder a un puerto que contiene un dispositivo distinto al esperado. Por ejemplo, llamar a hub.motor("A") cuando en el puerto A está conectado un sensor de inclinación.
AmbiguousDeviceError
Se produce cuando solicitas un dispositivo sin especificar puerto (por ejemplo, hub.motor()), pero hay dos dispositivos de ese mismo tipo conectados en A y en B simultáneamente. La biblioteca te obliga a especificar el puerto explícitamente ("A" o "B").
InvalidStateError
Se lanza ante secuencias de operaciones inconsistentes, como intentar llamar a hub.tasks.wait() dentro de una tarea en ejecución, o solicitar operaciones a un hub que ya ha sido desconectado o apagado.
UnsupportedFeatureError
Se lanza al intentar utilizar funciones no admitidas por el hardware o por la versión del firmware WeDo 2.0.
💡 Ejemplo de manejo de excepciones
from wedopy import Hub
from wedopy.exceptions import (
HubConnectionError,
DeviceNotFoundError,
OperationTimeout,
WedoError,
)
try:
with Hub() as hub:
motor = hub.motor("A")
sensor = hub.distance_sensor("B")
motor.run(80)
# Esperar lectura
distancia = sensor.read()
print("Distancia:", distancia)
except HubConnectionError:
print("Error: No se encontró ningún Smart Hub. ¿Está encendido el botón y parpadea el LED?")
except DeviceNotFoundError as e:
print(f"Error de puertos: {e}")
except OperationTimeout:
print("Tiempo de espera agotado al comunicar con el sensor.")
except WedoError as e:
print(f"Ocurrió un error en wedopy: {e}")