我正在尝试使用最好的异常处理方法,但我有点迷失。
例如,如果我有4个方法(1个调用另一个调用另一个方法......)。 对于每个方法,都可以抛出相同类型的自定义异常。
假设我在第4种方法中引发了错误。我是否需要在第3个中捕获它或者我可以在第一个中捕获它?
因为如果我尊重需要尽快捕获错误的原则,我应该将catch放在所有的第一种方法而不是第一种方法中。
Method1()
{
Method2();
}
Method2()
{
Method3();
}
Method3()
{
Method4();
}
Method4()
{
//Some code that could throw a customException
}
答案 0 :(得分:6)
我正在尝试使用最好的异常处理方法,但我有点迷失。
编写健壮的软件很难。
如果我尊重需要尽快发现错误的原则
这是一个糟糕的原则。 可能性与它有什么关系?您应该只编写可能的代码的原则没有帮助。 时间与它有什么关系?这是一个重言式,处理异常的正确位置是,可以正确处理异常;既不早也不以后。
在哪里可以正确处理异常?这完全取决于(1)异常和(2)您打算如何处理它。这听起来像是非常无益的建议,但你的问题非常模糊!让我们将异常排除在外,只考虑计算。放置计算的最佳位置在哪里?更早或更晚进行计算是否更好?你怎么可能为所有可能的计算回答这个问题?
我只是想避免在我的所有方法中捕获相同类型的错误,所以我可以在我的大方法中添加一个catch?
好吧,让我们考虑一下。假设为了参数,每个方法处理异常都正确。在什么情况下将异常处理移出每个被调用者并进入调用者是正确的?这很容易列举:
那是你所处的情况吗?然后可以在不改变语义的情况下将处理程序移动到调用者中,从而减少重复的代码。
我想关闭我的应用程序,因此请记录错误并关闭我的应用程序
然后将处理程序尽可能靠近Main。
或者,处理“我正在卸载appdomain因为我得到了一个未处理的异常”事件并将你的处理逻辑放在那里。
我注意到,如果你的应用程序像那样异常关闭,你无法保证你的日志记录系统不会爆炸,你可能会再次爆炸它。小心!