You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BinanceSocketManager开发WebSocket时PyLance提示代码不可达

问题结论

这个PyLance提示不是检测bug,你的代码逻辑确实导致await client.close_connection()为不可达代码。

原因分析
  • 首先while True是无限死循环,代码中没有设置break、return这类常规跳出循环的逻辑,只要价格阈值条件没有触发,循环会永久运行,永远走不出async with代码块,自然不可能执行块后的关闭连接逻辑。
  • 就算价格阈值条件触发,你执行的loop.stop()是直接终止整个异步事件循环的运行,不会回到当前main协程继续执行后续代码,连async with的上下文自动退出逻辑都不会正常执行,更不可能走到后续的连接关闭代码。
修复方案

将触发条件里的loop.stop()替换为break,先正常跳出while循环,此时会自动执行async with的上下文回收逻辑关闭trade socket,之后就能正常执行后续的客户端连接关闭代码。如果确实需要在下单完成后终止事件循环,可以把loop.stop()放在关闭连接的代码之后执行。

修改后的参考代码:

async def main(coin):
    bm = BinanceSocketManager(client)
    ts = bm.trade_socket(coin)
    async with ts as tscm:
        while True:
            res = await tscm.recv()
            if res:
                frame = createframe(res)
                if frame.Price[0] < buyprice * 0.97 or frame.Price[0] > 1.005 * buyprice:
                    order = client.create_order(symbol=coin,
                    side='SELL',
                    type='MARKET',
                    quantity=buy_quantity)
                    print(order)
                    break # 替换原有loop.stop(),先跳出循环
    await client.close_connection()
    # 如果需要终止事件循环,放在这里执行
    loop.stop()

内容的提问来源于stack exchange,提问作者Berkant Dirim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:54:02