我想写一些try并捕获捕获任何类型或异常,这段代码是否足够(这是Java中的方法)?
try {
code....
}
catch (Exception ex){}
或者应该是
try {
code....
}
catch {}
答案 0 :(得分:50)
这两种方法都会捕获所有异常。两个代码示例之间没有显着差异,除了第一个代码示例将生成编译器警告,因为ex
已声明但未使用。
但请注意,有些异常是特殊的,会自动重新抛出。
ThreadAbortException
是一个可以捕获的特殊异常,但它会在catch块的末尾自动再次引发。
http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx
正如评论中所提到的,捕获和忽略所有异常通常是非常糟糕的主意。通常您想要执行以下操作之一:
抓住并忽略您知道并非致命的特定异常。
catch (SomeSpecificException)
{
// Ignore this exception.
}
抓住并记录所有异常。
catch (Exception e)
{
// Something unexpected went wrong.
Log(e);
// Maybe it is also necessary to terminate / restart the application.
}
捕获所有异常,进行一些清理,然后重新抛出异常。
catch
{
SomeCleanUp();
throw;
}
请注意,在最后一种情况下,使用throw;
而不是throw ex;
重新抛出异常。
答案 1 :(得分:3)
请注意,除了所有其他评论之外,还有一些细微差别,为了完整起见,这里应该提到这一点!
使用空catch子句,当程序集标记为" RuntimeCompatibility(WrapNonExceptionThrows = false)"时,可以捕获非CLSCompliant异常。 (自CLR2起默认为true)。 [1] [2] [3]
[1] http://msdn.microsoft.com/en-us/library/bb264489.aspx
[2] http://blogs.msdn.com/b/pedram/archive/2007/01/07/non-cls-exceptions.aspx
[3] Will CLR handle both CLS-Complaint and non-CLS complaint exceptions?
答案 2 :(得分:1)
两者都很好,但只有第一个允许你检查Exception本身。
两者都吞下Exception,你应该只捕获例外来做一些有意义的事情。隐藏问题不有意义!
答案 3 :(得分:1)
我捕获所有异常并将其存储在数据库中,因此可以轻松纠正错误 - 存储页面,地点,日期等
try
{
Cart = DB.BuyOnlineCartMasters.Where(c => c.CmpyID == LoginID && c.Active == true).FirstOrDefault();
}
catch (Exception e)
{
ErrorReport.StoreError("CartMinifiedPartial-Company", e);
-- storing the error for reference
}
贮藏
public static void StoreError(string ErrorPage, Exception e)
{
try
{
eDurar.Models.db_edurarEntities1 DB = new Models.db_edurarEntities1();
eDurar.Models.ErrorTable Err = new eDurar.Models.ErrorTable();
Err.ErrorPage = ErrorPage;
if (e.Message != null)
{
Err.ErrorDetails = e.Message;
}
if (e.InnerException != null)
{
Err.InnerException = e.InnerException.Message.ToString();
}
Err.Date = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"));
DB.ErrorTables.AddObject(Err);
DB.SaveChanges();
}
答案 4 :(得分:1)
onToBeDeletedChanged
答案 5 :(得分:0)
两种方式都是正确的 如果你需要在catch块中使用异常对象,那么你应该使用
try {
code....
}
catch (Exception ex){}
并且在catch块中使用ex。
无论如何,对于Exception类而言,并不总是一个好习惯,这是一个更为具体的例外 - 这是一个你可以期待的例外。
答案 6 :(得分:-1)
试 {
.. .. ..
}
catch(Exception ex) {
.. .. ..
} Exception ex表示所有例外情况。