Linux下bleak模块报AttributeError: __aexit__错误的解决求助
蓝牙Bleak模块Linux下
__aexit__错误解决 我使用bleak模块扫描蓝牙节点,该模块在Windows系统上运行正常,但在Linux系统下运行以下代码时,在__aexit__处出现错误。
原代码
import asyncio import time from bleak import BleakScanner from bleak.backends.bluezdbus.client import BleakClientBlueZDBus ADDRESS = "EE:68:29:AB:6F:19" async def main(): global ADDRESS device = await BleakScanner.find_device_by_address(ADDRESS, timeout=20.0) print(device) if not device: time.sleep(0.2) print("Can not find device...") else: async with BleakClientBlueZDBus(device) as client: for service in client.services: print(service) if __name__ == "__main__": asyncio.run(main())
报错信息
Traceback (most recent call last): File "/home/hai/PycharmProjects/pythonProject/main.py", line 23, in <module> asyncio.run(main()) File "/usr/lib/python3.8/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete return future.result() File "/home/hai/PycharmProjects/pythonProject/main.py", line 17, in main async with BleakClientBlueZDBus(device) as client: AttributeError: __aexit__
解决方法
问题出在直接使用了Bleak的底层实现类BleakClientBlueZDBus,这个类并非异步上下文管理器,不支持async with语法。正确的做法是使用Bleak提供的顶层跨平台客户端类BleakClient,它会自动根据系统选择对应的底层实现,同时支持异步上下文管理。
修改后的代码:
import asyncio import time from bleak import BleakScanner, BleakClient ADDRESS = "EE:68:29:AB:6F:19" async def main(): global ADDRESS device = await BleakScanner.find_device_by_address(ADDRESS, timeout=20.0) print(device) if not device: time.sleep(0.2) print("Can not find device...") else: async with BleakClient(device) as client: for service in client.services: print(service) if __name__ == "__main__": asyncio.run(main())
内容的提问来源于stack exchange,提问作者Nguyễn Thuận Hải
相关产品推荐
相关产品推荐

