我在这里看了一些其他的try catch finally问题,但我不确定这个问题是否已经得到了回答。做像这样的事情是不是很难闻:
Exception? ex = null;
try { //something }
catch (Exception e) { ex = e ;}
finally {
DoSomething();
}
... //more code
//end of method
if (ex !=null) { throw ex; }基本上,我试图确保运行某些代码(try/catch/finally之外),并在发生异常时抛出异常,但直到上述代码运行之后才抛出异常。我不能将所有代码都放在finally块中,因为它在某些条件条件之外。
如果这确实很难闻(我怀疑是这样),那么如何做到这一点呢?
发布于 2012-05-17 13:28:10
这绝对是一种代码的味道。在方法的末尾重新抛出异常将覆盖异常的调用堆栈,因此所有异常看起来都是在方法的末尾发生的,而不是真正发生的地方。
如果你不能把额外的代码放在现有的finally中,你可以创建嵌套的try..finally块:
try {
try { //something }
finally {
DoSomething();
}
... //more code
}
finally {
// cleanup code
}来自OP:的注释请参阅this code,了解此答案的作者引导我正确推导出的内容。
发布于 2012-05-17 13:24:42
既然你想在发生异常的情况下运行“更多代码”,为什么不把“更多代码”放在finally中呢?这本质上就是finally的作用--即使发生异常,也要保证执行
所以:
try {
// something
} catch (Exception e) {
***// more code here***
DoSomething();
throw;
}存储ex和抛出ex;将吞噬内心的期望。你想要抛出;以确保堆栈中的任何东西都不会被吞噬。
https://stackoverflow.com/questions/10630223
复制相似问题