如何用Python SocketIO获取数据并将各价格分配至独立变量?
解决Python SocketIO获取数据后分配单独变量的问题
首先,你需要先明确price_changed事件返回的data结构——从你的描述来看,它应该是包含USD、EUR等价格键值对的字典。接下来可以通过以下方式将价格分配到单独变量:
1. 回调函数内直接提取变量
修改你的on_message函数,从data字典中提取对应字段赋值:
@sio.on('price_changed') def on_message(data): # 先打印data确认结构,方便调试(后续可删除) print("原始数据:", data) # 提取价格到单独变量(注意键名要和返回数据匹配,比如实际是'USDprice'就改成对应键) USD = data.get('USD') EUR = data.get('EUR') # 验证变量值 print(f"USD价格: {USD}, EUR价格: {EUR}") # 注意:你原代码里的`sio.emit(data)`是错误用法,emit需要指定事件名,不需要的话直接删除这行
2. 使用全局变量(供回调外访问)
如果需要在回调函数外使用这些价格变量,可以声明全局变量:
# 初始化全局变量 USD = None EUR = None @sio.on('price_changed') def on_message(data): global USD, EUR # 声明使用全局变量 USD = data.get('USD') EUR = data.get('EUR') print(f"全局变量已更新: USD={USD}, EUR={EUR}")
3. 类管理状态(更规范的方式)
如果项目复杂度较高,推荐用类封装Socket连接和价格数据,避免全局变量混乱:
import socketio class PriceClient: def __init__(self): self.sio = socketio.Client() self.USD = None self.EUR = None # 绑定事件回调 self.sio.on('connect', self.on_connect) self.sio.on('connect_error', self.on_connect_error) self.sio.on('disconnect', self.on_disconnect) self.sio.on('price_changed', self.on_price_changed) def on_connect(self): print("已连接!") self.sio.emit('price_changed') def on_connect_error(self, data): print("连接失败!") def on_disconnect(self): print("已断开连接!") def on_price_changed(self, data): self.USD = data.get('USD') self.EUR = data.get('EUR') print(f"价格更新: USD={self.USD}, EUR={self.EUR}") def run(self): self.sio.connect('wss://www.haremaltin.com:2088') self.sio.wait() if __name__ == '__main__': client = PriceClient() client.run()
关键注意点
- 请根据实际返回的
data字典键名调整提取逻辑,比如如果返回键是'USDprice',就改成data.get('USDprice')。 - 原代码中的
sio.emit(data)是错误用法,socketio.Client.emit()第一个参数必须是事件名称,不需要向服务器发送数据的话直接删除该行。
内容的提问来源于stack exchange,提问作者Umut Demir
相关产品推荐
相关产品推荐

