我有两个功能。如果 FunA 通过异常 FunB 不执行。我在 FunA 代码中放置了 Try catch,如果异常通过 FunA() 显示 FunA 异常。但它没有发生。如何做到这一点?
try
{
FUNA();
FUNB();
}
catch (Exception exp)
{
System.Console.WriteLine("Error has occurred during processing:\n" + exp.ToString());
}
我有两个功能。如果 FunA 通过异常 FunB 不执行。我在 FunA 代码中放置了 Try catch,如果异常通过 FunA() 显示 FunA 异常。但它没有发生。如何做到这一点?
try
{
FUNA();
FUNB();
}
catch (Exception exp)
{
System.Console.WriteLine("Error has occurred during processing:\n" + exp.ToString());
}
编辑:刚刚注意到这一点:
我在 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 请求或用户启动的操作)。您可以真正处理的异常可能相对较少(即您可以纠正的情况),并且有很多您无法处理的异常......所以在这些情况下您不应该继续。
显然,您也可以放入FunB
try/catch 语句。
如果我正确解释这一点:
我在 FunA 代码中放置了 Try catch,如果异常通过 FunA() 显示 FunA 异常。
FunA()
那么也许您需要在捕获异常后重新抛出异常?
FunA()
打印后只需在 catch 块内添加:
throw;