Python Websockets报错'Connect' object has no attribute 'send'如何解决
报错原因
你使用的websockets是基于asyncio的异步Python库,websockets.connect()方法本身不会直接返回可用的WebSocket连接对象,它返回的是异步上下文管理器实例,你直接赋值得到的ws是Connect类型对象,自然不存在send方法。同时你的现有代码完全没有遵循异步编程的语法要求,没有异步运行环境支撑也无法正常执行WebSocket相关操作。
修复方案
按照异步编程规范调整代码即可,参考可运行的代码如下:
import asyncio import websockets async def run_client(): # 通过异步上下文管理器获取真实WebSocket连接实例 async with websockets.connect('ws://localhost:6789') as ws: # 异步方法调用需要添加await关键字 await ws.send('asdf') # 若需要接收服务端返回可使用await ws.recv() # resp = await ws.recv() # print(f"收到响应:{resp}") if __name__ == "__main__": # 启动异步事件循环执行客户端逻辑 asyncio.run(run_client())
核心修改点如下:
- 引入
asyncio库提供异步运行环境,所有WebSocket交互逻辑封装在async修饰的异步函数中 - 使用
async with语法调用websockets.connect(),此时获取的ws才是具备send、recv方法的可用连接对象 - 调用
send、recv这类异步方法时必须在前添加await关键字,等待异步操作执行完成 - 最后通过
asyncio.run()启动异步事件循环,执行客户端逻辑
内容的提问来源于stack exchange,提问作者heagan
相关产品推荐
相关产品推荐

