【问题标题】:Is it possible to iterate again in a loop when catch an exception instead of continue?当捕获异常而不是继续时,是否可以在循环中再次迭代?
【发布时间】:2012-12-05 10:58:18
【问题描述】:

对不起,如果我的标题有点混乱。

我的程序正在做一些网络抓取,因此由于随机网络条件会捕获一些 SocketTimeoutException。现在,当捕获 SocketTimeoutException 时,会跳过该特定循环,因此我会错过一些数据。我确信当跳过的循环中的代码再次运行时一切都会好起来的。由于我正在抓取大量数据(> 100 万组数字),我不想记录异常循环并手动再次运行它们。有没有办法在捕获异常时再次运行相同的循环?

try{
    for(){
        someCode
        ...
    }
}catch(IOException){
}

【问题讨论】:

  • 有什么理由不能将 try/catch 块放入 for 循环中?
  • 在循环内尝试/捕捉?
  • 只是因为我的程序在循环中有很多循环,并且每次 IDE 提醒我抛出异常时,我选择通过在周围的 try/catch 中添加更多的 catch 情况来处理异常。随着异常数量的增加,这变得令人困惑。感谢您的帮助!
  • 那么你可能需要重新设计你的代码,或者至少把它分解成更小的方法。

标签: java exception loops try-catch iteration


【解决方案1】:

只需将try-catch 放入循环中

for () {

  try {
    // somecode
    // ..
  } catch ( IOException ioException ) {
    // handle
  }

}

【讨论】:

    【解决方案2】:

    为什么不把异常处理放在循环里面

    for(){
         try{
             // someCode
         }catch(IOException e){
            //handle exception if necessary
         }
    }
    

    【讨论】:

      【解决方案3】:

      你必须这样做。请尝试在循环内捕获。

      for(){
          try { 
                  someCode
                  ...
          } catch(IOException){
          }
      }
      

      【讨论】:

        【解决方案4】:

        这有问题,

        try{
            for(){
            //    someCode
                ...
            }
        }catch(IOException){
          // Once exception happens your for() loop breaks !!!!!
        }
        

        相反,这样做...

         for () {
        
              try {
                // somecode
                // ..
              } catch ( IOException ioException ) {
                // handle(do something) here, not throwing error which will break the loop
              }
        
            }
        

        【讨论】:

          【解决方案5】:

          我想重做相同的循环迭代:

          int i = 0;
          int n = 15; // your n
          for (i = 0; i < n; i++) {
              try {
                  // some code
              } catch (Exception e) {
                  i--;
              }
          }
          

          但要小心无限循环!您应该添加一个 MAX_TRIES 管理。

          【讨论】:

            猜你喜欢
            • 2011-08-19
            • 1970-01-01
            • 2020-07-01
            • 2011-02-07
            • 1970-01-01
            • 2020-09-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多