2010-06-24 32 views
1

我知道这样做并不好,只要在Exception上加上try catch就可以了,因为这可能导致隐藏问题和其他问题。我应该捕捉异常吗?

但是,我仍然不知道我是否应该这样做在我的情况。

我的网站是沉重的ajax,所以我发回json响应。所以,现在我已经确定了可以提出像一个空引用,SQL数据库等一些可能的例外

因此,在这些的的catch语句我有一个很好的消息给用户类似

发生了数据库错误您 东西尚未保存

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

所以会是在这种情况下更好的,我确定 - 如SQL

  • 捕获异常,outof范围
    • 日志与ELMAH
    • 显示漂亮的定制味精每个异常
  • 捕获异常后
    • 用elmah记录
    • 显示一些通用信息
    • 回来并添加该例外列表。

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

回答

0

隐藏异常不是一个好主意,因为它会隐藏代码的错误,并且不会让您明白什么是错误的。不是所有的错误都应该显示给那些使用这些知识来附加你的网站的用户。

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

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

+0

那是我的意图。我不会给他们一些堆栈轨道。因为我登录ELMAH(一个错误记录工具),所以我也没有隐藏每个说的错误消息,所以我会知道它。这只是我在想,如果我没有捕捉到所有的例外,并且我忘记了用户可能会在黑暗中离开。我仍然会知道ELMAH发生了什么事,但用户不会。所以这就是为什么我认为捕获所有例外作为最后手段显示我自己的味精给用户。一旦我看到它看到发生了什么,并可能增加另一个捕获。 – chobo2 2010-06-24 01:13:02

+0

我的意思是可以向用户显示错误信息,但错误不应该给你正在使用的软件提供任何提示,以避免这些细节可以用于附加你的网站。在一些地方,代码应该捕获所有剩下的异常,以允许您控制用户将看到的消息。登录的用户不知道查询“SELECT * FROM drupal.users WHERE name ='xyz'”失败;他们只需要知道服务器端存在错误,他们需要稍后再试。 – kiamlaluno 2010-06-24 01:24:38

+0

那么我的邮件就像是“由于数据库错误而无法保存您的信息”或“由于未知错误而无法保存您的信息”。 – chobo2 2010-06-24 01:30:11

3

所以

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. 
} 

,而不是在低级别的代码它通常是不好的形式捕获异常那里。理论上你希望他们被抛出,所以你知道什么时候出现问题。通常最好捕捉那些你知道会发生的事,并处理它们。然后以更高的水平捕捉未处理的。

+0

嗯,我没有使用任何低级代码。另外,我正在使用我记录所有捕获到的异常。所以我不确定我是否很难打电话说不,我不会记录它,因为潜在的用户可能会坐在那里想知道发生了什么。 – chobo2 2010-06-24 01:05:56

+1

当我看到低级别时,我的意思是方法级别的实现代码,如您所示。 – 2010-06-24 01:08:58

0

找出您知道可以处理或执行某些操作的异常,并采取适当的措施来纠正问题。

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

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

我想我的观点是,如果你打算做一些与这些异常有关的特定事情,你应该只捕获特定的异常,否则应该只需要处理未知的Exception类的一般catch。

0

如果你想让程序的不同部分来处理它,你可以捕获异常,记录它,然后重新抛出它。或者你可以让它冒泡并记录下来,如果你愿意的话,可以在更高层次上处理它。