【发布时间】:2017-02-01 15:45:56
【问题描述】:
此代码来自我们的项目,生产代码:
if (changedToNull) {
try {
throw new Exception();
} catch (Exception e) {
log.debug("changedToNull", e);
}
}
开发者不再与我们合作。
为什么有人会抛出 Exception 并直接捕获并记录它?
【问题讨论】:
-
它可以让你获得堆栈跟踪。
-
如果这就是它的全部,那么它没有任何意义。如果由于复杂的业务决策而引发了多个异常类型并单独处理,那可能是可以接受的。但是使用异常来整体控制程序流并不是最佳实践。
-
@resueman 没必要为此扔。
-
+1 表示好奇。当事情看起来很奇怪时,开发人员应该有他们所做的事情的理由。对于开发人员来说,认识到奇怪的东西是一个很好的特质,并且询问它比仅仅撕掉它更好。这就是 cmets 真正 派上用场的地方。 (虽然我不宽恕被质疑的代码)
-
@Tunaki 抱歉,但我不同意你的建议,因为重复确实是同一个问题,但它完全是一个不同的用例,在这里不适用。实际上,它解释了如何在 标准错误流 中打印异常,这不是这里的情况(顺便说一句,这是一种糟糕的做法),使用
Thread.dumpStack()在这里不适用,Thread.currentThread().getStackTrace()不会带来任何与此上下文相关的内容。