如果我在一个大的try catch中有一些代码最终会捕获OracleException
和一般Exception
,那么我就不能在try catch中抛出任何自定义异常了,因为它被捕获了由将军Exception
。
在这种情况下我该怎么做?
由于
try
{
// some code
if(a==b)
{
throw new MyCustomException(ex);
}
}
catch(OracleException ex)
{
...
}
catch(Exception ex)
{
...
}
答案 0 :(得分:5)
你的意思是你想要抛出一个自定义异常,即不被catch-call Exception
块捕获?
如果是这种情况,那么试试这个:
try
{
throw new MyCustomException();
}
catch (OracleException ex)
{
// Handle me...
}
catch (MyCustomException)
{
// Important: NOT `throw ex` (to preserve the stach trace)
throw;
}
catch (Exception ex)
{
// Handle me...
}
MyCustomException
类型的任何异常都将被第二个catch
(而不是第三个catch
)捕获,然后重新抛出。
请注意,执行catch (Exception)
通常是不好的做法 - 这是一个很好的例子。我绝对建议您不要再进行上述操作,而只是重构,以便不再捕捉Exception
,这将是一个更为全面的解决方案。
答案 1 :(得分:1)
检查一下:
try
{
...
}
catch()
{
throw new Execption("I'M A NEW EXCEPTION")
}
finally
{
...
}
答案 2 :(得分:0)
您不能简单地在自定义异常中添加catch
子句吗?
try
{
//Lots of code
}
catch (OracleException)
{
}
catch (MyCustomException)
{
}
catch (Exception)
{
}
答案 3 :(得分:0)
试试这个
catch(OracleException ex)
{
throw new MyCustomException(
"MyCustomEX error: Unable to ......", ex);
}