claude_dev
11f383a8e2
fix(data): akshare top_holders Length mismatch bug 根治
bug 根因 (实证 akshare 1.18.x stock_gdfx_em.py:418):
报告期未披露 (如 sz002673 的 20260630 在 2026-07-26 还未发) 时,
东财 PageSDLTGD 接口返 sdltgd=[], akshare pd.DataFrame([])+reset_index()
得 1 列 df, 然后 columns=[12 列] 抛
ValueError('Length mismatch: Expected axis has 1 elements, new values have 12')
这是确定性无数据 (非瞬时故障), 但 call_ak_with_retry 当网络错重试 3 次
(14s 退避) + 噪声 ERROR 日志, 浪费时间且消耗断路器配额。
修复:
新增 _safe_top_10_em 包装 ak.stock_gdfx_free_top_10_em: 子串匹配
'Length mismatch' (pandas 错误信息稳定) → 返空 df 带 8 列 schema
(TOP_HOLDERS_COLUMNS), 不抛; 其他 ValueError/ConnectionError 透传重试。
fetch_top_holders_one_period 改调此包装。
验证:
- Mac: sz002673/20260630 从 ~14s (3 重试) 降到 0.04s, 返 0×8 空 df
- 有效期 sz002673/20251231, sh600519/20250930 正常返 10×8 数据
- 9/9 新单测通过 (tests/data_platform/test_top_holders_parse.py)
2026-07-26 11:54:19 +08:00
..
2026-07-18 18:45:24 +08:00
2026-07-18 18:45:24 +08:00
2026-07-18 18:45:24 +08:00
2026-07-18 18:45:24 +08:00
2026-07-23 09:04:01 +08:00
2026-07-23 09:04:01 +08:00
2026-07-23 09:04:01 +08:00
2026-07-23 09:04:01 +08:00
2026-07-26 11:54:19 +08:00
2026-07-23 07:20:34 +08:00
2026-07-13 11:56:23 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-10 07:10:36 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 07:20:34 +08:00
2026-07-25 21:14:12 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 07:20:34 +08:00
2026-07-07 22:19:11 +08:00
2026-07-07 19:41:07 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-07 19:41:07 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 12:18:41 +08:00
2026-07-23 07:20:34 +08:00
2026-07-18 18:45:24 +08:00
2026-07-12 08:26:30 +08:00
2026-07-07 19:41:07 +08:00
2026-07-23 07:20:34 +08:00
2026-07-09 19:22:36 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 12:18:41 +08:00
2026-07-15 07:12:46 +08:00
2026-07-22 10:34:22 +08:00
2026-07-07 19:41:07 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-24 00:20:36 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 09:04:00 +08:00
2026-07-23 07:20:34 +08:00
2026-07-15 07:12:46 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 23:50:03 +08:00
2026-07-23 12:18:41 +08:00
2026-07-23 23:45:55 +08:00
2026-07-23 08:49:56 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 08:25:44 +08:00
2026-07-15 07:12:46 +08:00
2026-07-07 19:41:07 +08:00
2026-07-12 08:26:30 +08:00
2026-07-24 00:20:36 +08:00
2026-07-23 07:20:34 +08:00
2026-07-18 18:45:24 +08:00
2026-07-13 11:56:23 +08:00
2026-07-15 21:35:59 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-07 19:41:07 +08:00
2026-07-18 18:45:24 +08:00
2026-07-07 19:41:07 +08:00
2026-07-23 09:06:00 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-15 07:12:46 +08:00
2026-07-23 08:25:44 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 12:18:41 +08:00