Skip to content

fix: stock_zh_a_disclosure_{report,relation}_cninfo#7259

Closed
qiyongsen wants to merge 1 commit into
akfamily:mainfrom
qiyongsen:fix-disclosure-relation-cninfo
Closed

fix: stock_zh_a_disclosure_{report,relation}_cninfo#7259
qiyongsen wants to merge 1 commit into
akfamily:mainfrom
qiyongsen:fix-disclosure-relation-cninfo

Conversation

@qiyongsen
Copy link
Copy Markdown

@qiyongsen qiyongsen commented May 8, 2026

Summary

修复 stock_zh_a_disclosure_relation_cninfo 三处问题, 与 stock_zh_a_disclosure_report_cninfo (#7254) 行为对齐. 顺带修正两函数共有的 if market == "沪深京" or "基金": 语法 bug.

stock_zh_a_disclosure_relation_cninfo 三处修复

  1. if market == "沪深京":__get_stock_json(symbol) 误用 symbol 参数, 与 report 函数对齐改为白名单 + __get_stock_json(market). 修复 market="基金" 路径下 stock_id_map="" 引发的 TypeError: string indices must be integers
  2. totalAnnouncement=0 时提前返回空 DataFrame, 避免末尾按列重排引发 KeyError (与 AKShare 接口问题报告 stock_zh_a_disclosure_report_cninfo #7251 / fix: handle empty cninfo disclosure reports #7254 同模式)
  3. 公告时间改用 dt.tz_localize(None) 而非 dt.tz_convert(None). tz_convert(None) 会把 Asia/Shanghai 时间转回 UTC, 实测公告原始时间戳上海 16:37 在当前代码返回 08:37 (偏差 8 小时); tz_localize(None) 才是丢掉时区信息保留 wall-clock

stock_zh_a_disclosure_report_cninfo 一处修复

if market == "沪深京" or "基金": 因运算符优先级实际等价于 if (market == "沪深京") or "基金":, 表达式恒真. 对 market="监管" / "预披露"__get_stock_json 没有 elif 的 market, 会 fall through 到默认 A 股 stock list, 将错误的 A 股 orgId 拼入请求 silently 返错. 改为白名单 if market in ("沪深京", "基金"): 与原始意图对齐, 不扩展未测试的 market 范围.

Test

ruff check akshare/stock_feature/stock_disclosure_cninfo.py
ruff format --check akshare/stock_feature/stock_disclosure_cninfo.py
python3 -m compileall -q akshare/stock_feature/stock_disclosure_cninfo.py

Runtime check (节选):

import akshare as ak

# 1. relation 空路径不再 KeyError
df = ak.stock_zh_a_disclosure_relation_cninfo(
    symbol="600036", market="沪深京",
    start_date="20200101", end_date="20200131",
)
# shape=(0, 5)

# 2. relation market="基金" 跑通 (原作者本意场景, 之前 TypeError)
df = ak.stock_zh_a_disclosure_relation_cninfo(
    symbol="164701", market="基金",
    start_date="20240101", end_date="20240601",
)
# shape=(0, 5) 该窗口无内容

# 3. relation 时区为北京时间 (修复前: UTC, 偏差 8 小时)
df = ak.stock_zh_a_disclosure_relation_cninfo(
    symbol="000001", market="沪深京",
    start_date="20231201", end_date="20240101",
)
# 2023-12-27 16:37:17

# 4. report market="基金" 跑通拿到真数据
df = ak.stock_zh_a_disclosure_report_cninfo(
    symbol="164701", market="基金", category="",
    start_date="20240101", end_date="20240601",
)
# shape=(11, 5)

# 5. relation/report market="监管" 维持显式 TypeError
#    (与原代码行为一致, 不引入静默失败)

Related: #7251, #7254

修正两函数共有的 `if market == "沪深京" or "基金":` 恒真条件
(因运算符优先级等价于 `if (market == "沪深京") or "基金":`,
对 market="监管"/"预披露" 等 __get_stock_json 没有 elif 的路径
会 fall through 到默认 A 股 stock list 并 silently 返错),
改为白名单 `if market in ("沪深京", "基金"):` 与原始意图对齐.

relation 函数额外修复:
- if 条件原误写 `market == "沪深京"` 且 __get_stock_json(symbol) 误用 symbol 参数
- totalAnnouncement=0 时提前返回空 DataFrame, 避免末尾按列重排引发 KeyError
- 公告时间改用 dt.tz_localize(None) 而非 dt.tz_convert(None),
  返回北京时间而非 UTC (实测原代码偏差 8 小时)
@qiyongsen qiyongsen force-pushed the fix-disclosure-relation-cninfo branch from 88b46b4 to e53ba98 Compare May 8, 2026 08:06
@qiyongsen qiyongsen changed the title fix: stock_zh_a_disclosure_relation_cninfo fix: stock_zh_a_disclosure_{report,relation}_cninfo May 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants