首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Try/ Catch / Finally,在Finally中使用Catch中的异常?

Try/ Catch / Finally,在Finally中使用Catch中的异常?
EN

Stack Overflow用户
提问于 2012-05-17 13:20:47
回答 2查看 639关注 0票数 1

我在这里看了一些其他的try catch finally问题,但我不确定这个问题是否已经得到了回答。做像这样的事情是不是很难闻:

代码语言:javascript
复制
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块中,因为它在某些条件条件之外。

如果这确实很难闻(我怀疑是这样),那么如何做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-17 13:28:10

这绝对是一种代码的味道。在方法的末尾重新抛出异常将覆盖异常的调用堆栈,因此所有异常看起来都是在方法的末尾发生的,而不是真正发生的地方。

如果你不能把额外的代码放在现有的finally中,你可以创建嵌套的try..finally块:

代码语言:javascript
复制
try {
  try { //something }
  finally {
      DoSomething();        
  }
   ... //more code
}
finally {
  // cleanup code
}

来自OP:的注释请参阅this code,了解此答案的作者引导我正确推导出的内容。

票数 6
EN

Stack Overflow用户

发布于 2012-05-17 13:24:42

既然你想在发生异常的情况下运行“更多代码”,为什么不把“更多代码”放在finally中呢?这本质上就是finally的作用--即使发生异常,也要保证执行

所以:

代码语言:javascript
复制
try {
    // something 
} catch (Exception e) {

    ***// more code here***

    DoSomething();
    throw;
}

存储ex和抛出ex;将吞噬内心的期望。你想要抛出;以确保堆栈中的任何东西都不会被吞噬。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10630223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档