参考

字符串数值

行情、指标、财务这些端点的数值是字符串("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 为原生数字。