gpt4 book ai didi

java - 遗留代码中捕获和忽略的异常

转载 作者:太空宇宙 更新时间:2023-11-04 10:46:15 24 4
gpt4 key购买 nike

有一个遗留的 Java 项目。

在代码审查过程中,我注意到同事替换了代码

    } catch (Exception e) {
ok = false;
}
// and ok was never used since then

    } catch (Exception e) {
e.printStackTrace();
}

也就是说,最糟糕的做法“忽略异常”被第二个最糟糕的“将异常打印到 stdout 并继续”所取代。 (同事们相信代码不会因此而变得更糟。)

我知道有一个完整的holy war关于这一点,真正聪明的人建议每个人在捕获异常之前首先思考。不幸的是,这似乎还没有完成。遗留代码捕获异常并忽略它们。可以修改代码以引发异常而不是忽略它,但没有人知道有多少用例场景会因此而中断。单元测试没有帮助,因为单元测试未涵盖该方法。没有人知道该方法在多少种情况下被调用。

鉴于调用者和被调用方法之间的契约不明确,我们如何处理捕获并忽略异常的遗留代码?

最佳答案

在某些情况下,预期会出现异常,并且可以安全地继续。无论如何,您应该使用记录器框架来记录异常而不是

e.printStackTrace();

所以首先你应该将其转换为

logger.error("context", e);

一些选项:

  • 使用日志来检测哪些异常正常,并将它们降级为 logger.info()logger.debug()(如 @Ivan 所评论)
  • 一段时间后,更改其余位置以引发新的已检查异常。这将使您能够获得有关哪些其他代码将受到影响的编译器反馈。稍后您可以恢复为未选中状态。
    • 开始单元测试
    • 开始保护产品的主循环/入口点免受任何地方发生未经检查的异常的影响

关于java - 遗留代码中捕获和忽略的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48384081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com