实盘行情循环仅输出字典最后值及多币种LTP仅打印单币种问题
问题修复方案
问题根源
- 循环提前终止:原函数中
return Ltp写在for循环内部,导致循环第一次执行就直接返回结果、终止函数,后续币种完全没处理,所以只能拿到单个币种的数据。 - 无序集合的问题:
crypto用了集合{},集合是无序的,每次循环的币种顺序可能随机,不利于固定顺序的行情展示。 - 全局变量冗余:全局的
ltp_data会在多次调用函数时累积旧数据,不符合实时行情“每次获取最新数据”的需求。
修复方案1:修正循环逻辑(单币种请求)
调整return位置,确保所有币种处理完成后再返回结果,同时优化变量作用域:
import requests # 改用列表保持固定的币种顺序 crypto = ["BTCUSDT", "LTCUSDT", "DOGEUSDT"] def live_ltp(): ltp_data = [] # 函数内部创建列表,避免旧数据累积 base_url = "https://api.binance.com/api/v3/ticker/price?symbol=" for symbol in crypto: url = base_url + symbol response = requests.get(url) # 增加请求失败的容错处理 if response.status_code == 200: ltp = response.json() ltp_data.append(ltp) else: ltp_data.append({"symbol": symbol, "error": f"请求失败,状态码{response.status_code}"}) return ltp_data # 循环结束后返回所有币种数据 while True: print(live_ltp())
修复方案2:批量请求API(更高效)
Binance支持通过一次请求获取多个币种的价格,减少HTTP请求次数,提升效率:
import requests import json crypto = ["BTCUSDT", "LTCUSDT", "DOGEUSDT"] def live_ltp(): base_url = "https://api.binance.com/api/v3/ticker/price" # 构造批量请求参数,需将币种列表转为JSON字符串 params = {"symbols": json.dumps(crypto)} response = requests.get(base_url, params=params) if response.status_code == 200: return response.json() else: return {"error": f"请求失败,状态码{response.status_code}"} while True: print(live_ltp())
内容的提问来源于stack exchange,提问作者Shankar
相关产品推荐
相关产品推荐

