首页 > 解决方案 > 在 Python 中与 WebSocket 连接时出错:TypeError: 'str' object is not callable

问题描述

我正在尝试通过 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”仅用于计算循环,我试图删除该功能,一直遇到麻烦,所以不是那样的。

如果有人能提供帮助,非常感谢,而且我不是专业的程序员,所以如果问题很容易解决,请不要对我大喊大叫,因为我真的很努力地为自己找到解决方案。

标签: pythonstringfunctionwebsocket

解决方案


推荐阅读