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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:20:05