2010-03-22 24 views
1

在团队环境中,后异常,如果我处理异常(像这样)的:意义(不)重新抛出登录

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.exTest(); 

} 


public void exTest() 
{ 
    try 
    { 
     throw new Exception("sjsj"); 
    } 

    catch (Exception ex) 
    { 
     string s = ex.Message; 
     throw; 
    } 

} 

的不是重新抛出异常(抛出)的含义?即使没有关键字,也会使用web.config中的自定义错误设置(重定向到指定页面)。

感谢

回答

4

如果不重新抛出异常,调用代码大概会认为这方法行得通。这通常是一个真的,真的很糟糕事情要做。

“不,我没能完全加载您的帐户详细信息,因此您的银行帐户有0的默认平衡现在,等待我只写数据到数据库......在此期间,请随时仔细阅读我帮助生成的日志,以显示我为什么要搞砸你的数据“)

严重的是,记录错误并不等同于处理它。你应该重新抛出一个异常,除非你实际上已经处理了一个异常,以致调用者可以有效地假定它没有发生。

如果正在反正你的显示错误页面,那就表明,即使在这个方法失败了,另一个也失败了。你不应该依赖那个。

+0

如果您正赶上错误只是为了记录与诸如类和行号的附加信息,然后重新抛出,您要添加的,即使你不处理异常值好位。如果你让异常去到UI或者其它任何的ex.message它带来和堆栈跟踪可以使它很难搞清楚究竟是什么导致了问题。特别是如果你唯一的repro在生产。你可能没有好的信息。 – user230949 2010-04-26 22:30:09

+0

@ user230949:请*请*,不要登录并重新抛出。这将使适当的日志记录更加困难。总是记录它,或重新抛出它,而不是两者。 – sleske 2013-11-27 16:42:01

+0

@sleske:这取决于你的日志设置和各种事情。我同意它可以让事情变得更难 - 但它也可能非常有用。我不想总结任何一种方式。 – 2013-11-27 17:46:23

1

不重新抛出异常的后果是,你有效地忽略异常。这很少是正确的做法,因为它掩盖了错误。忽略错误可能会让你的应用程序处于没有明确定义的状态,出现各种奇怪的副作用。总之:不要去那里!