-1

我有两个功能。如果 FunA 通过异常 FunB 不执行。我在 FunA 代码中放置了 Try catch,如果异常通过 FunA() 显示 FunA 异常。但它没有发生。如何做到这一点?

try
{
   FUNA();
   FUNB(); 
}
catch (Exception exp)
{ 
   System.Console.WriteLine("Error has occurred during processing:\n" + exp.ToString());
}
4

2 回答 2

4

编辑:刚刚注意到这一点:

我在 FunA 代码中放置了 Try catch,如果异常通过 FunA() 显示 FunA 异常。

好吧,您还没有显示FunA代码。您已经展示了调用 FunA. 如果您的FunA方法确实在一个块中包含有问题的代码try段,并且是一个合适的catch块,并且没有重新抛出,那么异常不应传播(除非它是 a ThreadAbortException,但这有点特殊)。

但否则不,FunB不会执行。这就是 try/catch 的工作原理——当抛出异常时,执行流程离开try块,并且不会返回到它停止的地方。如果你真的FunB即使FunA失败也执行,你需要在块之后catch调用:

try
{
    FunA();
}
catch (IOException e) // Or whatever specific exception you want...
{
    // Logging here... or possibly returning, or rethrowing in some cases
}
FunB();

请注意我是如何在此处捕获特定异常的。您几乎不应该只 catch Exception,除非是在一个逻辑操作的顶层(例如 Web 请求或用户启动的操作)。您可以真正处理的异常可能相对较少(即您可以纠正的情况),并且有很多您无法处理的异常......所以在这些情况下您不应该继续。

显然,您也可以放入FunBtry/catch 语句。

于 2012-12-11T06:59:56.933 回答
0

如果我正确解释这一点:

我在 FunA 代码中放置了 Try catch,如果异常通过 FunA() 显示 FunA 异常。

FunA()那么也许您需要在捕获异常后重新抛出异常?

FunA()打印后只需在 catch 块内添加:

throw;
于 2012-12-11T07:04:28.890 回答