在 Python 中与 WebSocket 连接时出错:TypeError: 'str' object is not callable

时间:2021-07-11 14:04:44

标签: python string function websocket

我正在尝试通过 WebSocket 建立连接以从加密货币市场检索数据。我对编程并不陌生,但从现在开始我主要使用 C++ 基础知识。我学了一点 Python 因为它看起来更容易设置,然后去阅读了 WebSocket 文档。

我设法建立了一些好的东西,从 Binance 检索信息并将它们转换为变量以进行操作。问题是在程序运行时,我随机得到这个错误:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "<stdin>", line 2, in connection
  File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 353, in recv
    opcode, data = self.recv_data()
  File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 376, in recv_data
    opcode, frame = self.recv_data_frame(control_frame)
  File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 416, in recv_data_frame
    self.pong(frame.data)
  File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 342, in pong
    self.send(payload, ABNF.OPCODE_PONG)
  File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 282, in send
    return self.send_frame(frame)
  File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 303, in send_frame
    data = frame.format()
  File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_abnf.py", line 238, in format
    mask_key = self.get_mask_key(4)
TypeError: 'str' object is not callable

它似乎是随机弹出的,因为我记下了它出现在哪个循环中,而且它永远不会相同:有时在 30 个循环之后,有时在 200 个循环之后。

在我看来,库中可能有一个称为函数的“str”变量,但我真的不知道如何解决这个问题。

程序代码如下:

import websocket
import json

socket = 'wss://stream.binance.com:9443/ws/xrpusdt@kline_5m' 

def on_message(message):

 json_message = json.loads(message)
 candle = json_message['k']
 is_closed = candle['x']
 open = candle['o']
 close = candle['c']
 high = candle['h']
 low = candle['l']
 vol = candle['v']
 print("Apertura: ", open)
 print("Chiusura: ", close) 
 print("Massimo: ", high)
 print("Minimo: ", low)
 print("Volume: ",vol)
 print("Candela chiusa: ", is_closed)
 return(open,close,high,low,vol,is_closed)


def on_close(ws, close_status_code, close_msg):
 print("Connection closed")

ws = websocket.WebSocket(socket)


def connection():
 data = ws.recv()
 o,c,h,l,v,ic = on_message(data)
 #variabili convertite in float
 open_f = float(o)
 close_f = float(c)
 high_f = float(h)
 low_f = float(l)
 v_f = float(v)
 #variazione percentuale
 var_perc = ((close_f/open_f)-1)*100
 print("Variazione: ", var_perc,"%")
 var_perc = ((close_f/open_f)-1)*100*75
 print("Variazione con leva x75: ", var_perc,"%")
 print("\n")
 return(open_f,close_f,high_f,low_f,v_f,var_perc,ic)

a=0

while 'true':

 ws.connect(socket, suppress_origin=True)
 open,close,high,low,volume,var,is_closed = connection()
 ws.close()
 a=a+1
 print(str(a))

变量 'a' 仅用于计数循环,我试图删除该功能,但一直有问题,所以不是那样。

如果有人愿意帮忙,非常感谢,我不是专业的程序员,所以如果问题很容易解决,请不要对我大喊大叫,因为我真的很想自己找到解决方案。

0 个答案:

没有答案