新品类 3 月同比增长率返回 Infinity,前端 ECharts 折线整段消失,控制台报 Invalid array length。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

SELECT CASE WHEN base = 0 THEN NULL ELSE (cur - base) / base END AS yoy FROM report;
df['yoy'] = df.apply(lambda r: None if r['base'] == 0 else (r['cur']-r['base'])/r['base'], axis=1)

增长率公式直接拿本期减基期再除以基期,基期为 0 时得到 Infinity 或 NaN。接口把 Infinity 序列化成非法 JSON,前端解析失败。业务上基期为 0 时增长率没有意义。这一点先确认清楚,后面就不用反复试。

「同比基期为零」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

具体做法是,基期为 0 时返回 null 并标记“无基期”;序列化前过滤 NaN 和 Infinity;前端把 null 画成断点 不参与连线;用新品类和成熟品类各查一次验证。

改完照着核一遍,新品类同比增长显示“—”,图表其余折线正常渲染,接口返回合法 JSON。

作者 9823189