在遗留代码中捕获并忽略java异常
有一个遗留Java项目
在代码审查期间,我注意到我的同事替换了代码
} catch (Exception e) {
ok = false;
}
// and ok was never used since then
与
} catch (Exception e) {
e.printStackTrace();
}
也就是说,最差的实践“忽略异常”被第二差的“将异常打印到标准输出并继续”所取代。(同事们相信代码不会因此变得更糟。)
我知道这里面有一个完整的holy war,真正聪明的人建议每个人在发现异常之前首先思考。不幸的是,这似乎还没有完成。遗留代码捕获异常并忽略它们。修改代码以抛出异常而不是忽略异常是可能的,但是没有人知道有多少用例场景会因此而中断。单元测试没有帮助,因为单元测试不包括该方法。甚至没有人知道该方法在多少种情况下被调用
鉴于调用方和被调用方法之间的约定不明确,我们如何处理捕获和忽略异常的遗留代码
# 1 楼答案
在某些情况下,预期会出现异常,可以安全地继续。在任何情况下,您都应该使用记录器框架来记录异常,而不是
所以首先你应该把它转换成
一些选择:
logger.info()
或logger.debug()
(如@Ivan所评论)