try/catch块中的完整代码

Lab*_*lan 6 c++ java

我想知道,它是一个good practice放置complete codetry block或我应该把only the code which I feel it will cause a specific exception
我应该总是抓住基本的例外

代码1:try块中的完整代码

myFunction(){
 try{
   .........
   Code with chance of OneException 
   .............
 }catch(OneException e){
  ............
 }catch(Exception e){
   ..............
 }
}
Run Code Online (Sandbox Code Playgroud)

代码2:只在try块中有可能出现异常的代码

myFunction(){
  .......
  try{
   Code with chance of OneException 
  }catch(OneException e){
  ............
  }
  ............
}
Run Code Online (Sandbox Code Playgroud)

代码3:我是否应该始终捕获异常

    myFunction(){
      .......
      try{
       Code chance of OneException 
      }catch(OneException e){
      ............
      }catch(Exception e){
       ..............
      }
      ........
   } 
Run Code Online (Sandbox Code Playgroud)

除此之外(code1,code2和code3)哪一个最好?
我主要关注java和C++编码

Jur*_*uri 5

一般来说,您应该只捕获您感兴趣的异常以及您可以处理的异常.那就是......捕获一个异常,你可以做一些事情,用户没有察觉到问题,或者明确有必要告诉用户这个问题.
对于所有其他异常,让他们弹出你明显记录的所有细节(堆栈跟踪等).注意,显然这并不意味着用户也应该看到异常输出而是一般错误.

告诉我,我假设当你写"OneException的代码机会"时,你知道如何处理OneException,但不是Exception,对吧?那么......只处理OneException.