参考
字符串数值
行情、指标、财务这些端点的数值是字符串("1723.50"),不是数字。直接做算术、比较或排序会出问题 —— 转换前先确认类型。
一句话
大部分端点的数值是字符串("1723.50"),只有 orderbook 和 snapshot 是原生数字。
哪些端点是字符串
实测结果(2026-10-07,逐个端点打印字段类型):
| 端点 | 数值字段的类型 |
|---|---|
quote · kline · minute · hot · technical · chip · profile · search · ipo · dividend · block-trade · margin-trade |
字符串 |
fund |
字符串(main_net、main_rank、close 等) |
orderbook · snapshot |
原生数字(price、high、low 等是 float/int) |
文本型端点(sector、lhb、screen …) |
值在 markdown 里,取 structured / tables 后仍是字符串 |
⚠️ 别按端点名猜 —— 同一个字段名在不同端点类型可能不同。orderbook 的 price 是数字,quote 的 last 是字符串。
为什么是字符串
源数据本身以文本形态给出(上游按文本返回、且部分字段可能为空串或带单位空格)。统一保持字符串可以避免“有的行是数字、有的行是 None 或 ""“这种更麻烦的混合类型。
怎么安全转换
def num(v, default=None):
"""把可能为字符串/空/None 的数值安全转成 float"""
if v is None:
return default
s = str(v).strip().replace(",", "")
if not s:
return default
try:
return float(s)
except ValueError:
return default
rows = resp["data"]
rows.sort(key=lambda r: num(r["amount"]) or 0, reverse=True)
三个要点:先 strip()(可能有空格)、去掉千分位逗号、空串要兜底(否则 float("") 抛异常)。
常见误用
- 直接相加 ——
"10" + "20"得到"1020"(字符串拼接),不是 30。 - 直接比较大小 —— 字符串按字典序比:
"9" > "10"为真,但数值上 9 < 10。排序会整体乱掉。 - 没兜底就
float()—— 空串或非数值字段会抛ValueError,把正常流程打断。 sort不转类型 —— 对字符串排序得到的是字典序,不是按价格/成交额排。- 按端点名猜类型 ——
snapshot是数字而quote是字符串,猜必错。
最后更新: 2026-10-07
逐端点实测(2026-10-07,数据层直调后打印每个字段的 Python 类型):quote / technical / chip / ipo / dividend / profile / fund 的数值字段全部为字符串;orderbook / snapshot 为原生数字。