Fail Fast(快速失败)是一种软件架构与防御性编程原则:当系统遇到无法处理或不符合预期的异常状态时,应当立即抛出错误并停止执行,而不是尝试隐藏错误(兜底)并继续运行。
- 避免脏数据污染:隐藏错误往往会导致系统生成看似正确但实际损坏的数据(例如把像素图假装成矢量 SVG),这种数据一旦流入下游(如前端编辑器或数据库),会引发更难排查的连环崩溃。
- 降低调试成本:错误越早暴露,离发生错误的源码位置就越近,开发者能直接根据堆栈信息定位根因(如
cairosvg缺失),而不是去排查为什么最终的渲染结果不对。 - 保证系统确定性:依赖明确、行为可预测。如果缺少关键依赖,直接阻断,而不是默默降级到一个不支持高级功能的备用方案(如
svglib),防止出现隐式的质量降级(Silent Degradation)。
- 核心数据格式不符:当大模型或外部 API 返回的数据不满足严格的结构化要求时(如要求纯矢量但返回了 Base64)。
- 关键依赖缺失:当实现核心功能(如 Visual Feedback 闭环必需的
cairosvg渲染)的底层库未安装时。 - 核心边界条件被破坏:当影响后续逻辑的关键变量(如坐标系缩放因子)计算出非预期值(如 0 或 NaN)时。
兜底机制(Fallback)只有在不影响核心交付物质量的前提下才能使用(如:UI 降级、端口被占用时自动切换端口)。 反模式:
- ❌ 捕获到错误后,用一个没有任何实际意义的“空壳”数据填充,让程序强行跑完。
- ❌ 使用多层
try...except吞掉真实的堆栈报错信息。 - ❌ 引入未经全面测试、功能残缺的第三方备用库来替代不可用的标准库。
“大声报错,总好过默默产出垃圾。” 在构建复杂系统(特别是强依赖大模型结构化输出的系统)时,拥抱 Fail Fast 是保持代码健康化和可维护性的最有效手段。