我正在编写一个连接到 Binance websocket 的脚本,并使用
.run_forever()
方法不断从网站获取实时数据。我希望能够调试我的代码并观察变量值的变化,但我不知道如何做到这一点,因为脚本基本上挂在 .run_forever()
方法上,因为它是一个无限事件循环。这是设计使然,因为我想连续获取实时数据(它大约每秒收到一条消息),但我想不出一种调试它的好方法。
我正在使用 VSCode,这里有一些代码片段,可帮助理解我的问题。 websocket的消息函数只是一堆技术分析和交易逻辑,但它也是包含我想观察的所有变化变量的函数。
socket = f"wss://stream.binance.com:9443/ws/{Symbol}@kline_{interval}"
def on_open(ws):
print("open connection")
def on_message(ws, message):
global trade_list
global in_position
json_message = json.loads(message)
candle = json_message['k'] # Accesses candle data
...[trade logic code here]...
def on_close(ws):
print("Websocket connection close")
# ------------------------- Define a websocket object ------------------------ #
ws = websocket.WebSocketApp(socket, on_open=on_open, on_message=on_message, on_close=on_close)
ws.run_forever()
如果需要更多代码来回答这个问题,那么我可以编辑这个问题以包含它(我想如果你想知道我想查看哪些变量,我只是认为这会更容易并且显示这些部分更简单)。
另外,我知道使用
global
不太好,一旦我完成(或接近完成)脚本,我想去整理一下,然后我会处理它。
我参加聚会有点晚了,但声明
websocket.enableTrace(True)
为我工作。将其放在定义 Websocket 对象之前,它将打印进出 Websocket 的所有流量,包括处理消息时可能遇到的任何异常。
您提到调试代码是第一项,因此请注意,默认情况下,WebSocketApp 甚至会在其回调函数中吞掉 Python 运行时错误。这意味着拼写错误可能会使代码默默地出现功能障碍,如果您不知道错误抑制,这将是一个真正令人头痛的问题。
最初,在开发代码时,您可能希望将运行时错误发送到终端的标准错误流,因此由于 websockets 使用日志记录模块来处理错误,因此以下内容可以实现这一点:
import logging
logging.basicConfig(format="%(message)s", level=logging.DEBUG )