我是否应该捕获异常?

时间:2010-06-24 00:59:05

标签: c# .net

我知道在它上面添加一个带有Exception的try catch是不好的,因为这可能导致掩埋问题和其他事情。

但是我仍然不知道我是否应该这样做。

我的网站是重ajax所以我发回json回复。所以现在我已经确定了一些可能引发的异常,如空引用,sql db等等。

因此,在这些问题的catch语句中,我会向用户发送一条很好的消息,例如

  

发生了数据库错误   东西还没有保存

但是我想如果他们是我现在看不到的其他例外,会发生什么。如果发生这种情况,我认为表单只会挂起而用户不知道发生了什么。

在这种情况下,

会更好吗?
  • 捕获我发现的异常 - 例如sql,outof range
    • 使用elmah登录
    • 为每个例外显示漂亮的自定义消息
  • 捕获例外情况
    • 使用elmah登录
    • 显示一些通用的msg
    • 回来并添加该例外列表。

所以

catch(IndexOutOfRangeException ex)
{
    // log here
    // customized msg
}
catch(Exception ex)
{
    // log here
    // generic msg
    // come back and add another exception later on what actually failed.
}

而不是

catch(IndexOutOfRangeException ex)
{
    // log here
    // customized msg
}

4 个答案:

答案 0 :(得分:3)

在低级代码中,捕获异常通常是不好的形式。从理论上讲,你希望它们被抛出,所以你知道什么时候出现问题。通常最好抓住你知道会发生的事情并处理它们。然后在更高的层次上捕捉未处理的那些。

答案 1 :(得分:0)

隐藏异常不是一个好主意,因为它会隐藏代码的错误,并且不会让您理解错误。并非所有错误都应显示给使用该知识附加您网站的用户。

我会将其记录在数据库或文件中,而不是向用户显示错误;您可以向用户显示错误消息,但错误消息可能只是您知道它意味着什么的代码。这是从缓存服务器完成的操作,它向用户返回一个名为guru meditation的错误代码。

我的回答是:抓住所有例外情况,即使是那些你认为不可能提出的情况。这将允许您控制用户将看到的错误消息。

答案 2 :(得分:0)

抓住您知道可以处理或执行某些操作的例外情况,并采取适当措施纠正问题。

如果异常是意外的,请记录尽可能多的信息并通知用户。

一般来说,用户不关心数据库错误或文件写入权限错误等等。所有他们需要被告知的是出了点问题。

我想我的观点是,如果您计划执行与这些异常相关的特定事务,您应该只捕获特定的异常,否则应该只需要处理Exception类以处理未知的所有异常。

答案 3 :(得分:0)

如果您希望程序的其他部分处理它,您可以捕获异常,记录它,然后重新抛出它。或者你可以让它冒泡并记录下来,如果你愿意,可以在更高级别的堆栈处理它。