CodeSOD:发现了一个错误 笔记

CodeSOD:发现了一个错误

Daniel 遇到了一个问题:尽管预期有数据,但数据库查询却返回了空结果。他使用了一个名为 execute_read 的包装函数来处理数据库交互。该函数存在若干可疑的设计选择。其中一个问题是 only_one 参数,它会显著改变返回类型,这与专用数据库库函数的行为不符。另一个问题在于使用 env.is_production() 来判断查询的时间阈值,这表明此类配置应由配置参数处理,而非依赖环境状态。然而,最严重的缺陷是宽泛的异常处理程序。该处理器不加区分地捕获所有错误,仅记录日志却允许函数继续执行。因此,当 Daniel 的查询出现语法错误时,函数捕获了异常并返回了空结果集。这掩盖了实际错误,导致 Daniel 花费大量时间进行调试。他最终在日志中发现了被埋藏的错误。作者强调了此类静默失败的危险性,尤其是在生产环境中可能发生的网络问题背景下。在不明确指示错误的情况下返回空结果,会导致严重的困惑和调试困难。