TRY CATCH抛出异常而不记录日志



我正在浏览别人的代码,有很多这样的代码:

try
   'Logic here
catch e as exception
throw
end try

我相信TRY和CATCH原因是没有意义的(它们可能用于调试)。有没有一种情况下,这样的编码是一种良好的实践?

有一个全局偶数处理程序(global.asa)

我同意这些子句是毫无意义的,更糟糕的是,它们给你的代码增加了混乱,只会增加混乱。

更糟糕的是:如果他们执行Throw e而不是Throw,那么原始异常的堆栈将丢失。

No。没有理由去尝试……只会扔出去的接球。如果你想在异常发生的那一刻调试和捕获异常,你应该在Visual Studio中停止框架异常(debug菜单-> exceptions…)。

在我继承的一个程序中有完全相同的事情,它实际上更糟,因为在c#中捕获是昂贵的(只有尝试是免费的)。我坚持每天删除一打这样的标签,再过几个星期就可以完成了。

一般来说,您不希望这样做(并且您也不想捕获System.Exception)。

也就是说,在某些情况下,您可能希望在调用堆栈的更上层Throw异常,并在其他地方Catch异常。下面是一个简单的例子:

Try
   ' Do some stuff here.  For this example, let's assume 
   ' it cannot cause any exceptions       
   Try
       ' Do some other stuff here that CAN cause an exception
   Catch innerEx as Exception
       ' Rethrowing so that the outer block handles this
       Throw
   End Try
Catch ex as Exception
   MessageBox.Show("I just caught an exception.")
End Try

如果你做了这样的事情,常识告诉你应该加上注释,说明你为什么这样做。

正如我所说,这是一个过于琐碎的例子,但更常见的用法可能是,您有一个方法调用另一个方法,并且您希望第一个方法处理第二个方法可能抛出的任何异常。如果您将Try/Catch块留在第二个方法之外而不是重新抛出,则行为将是相同的,但是Try/Catch和注释使您的意图更加明显。

编辑:如果您知道哪一行代码可能会抛出异常,那么在该行上面加上注释可能比添加Try/Catch块更可取。

相关内容

  • 没有找到相关文章

最新更新