0

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

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

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

5 回答 5

5

只需将try-catch放在循环内

for () {

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

}
于 2012-12-18T09:09:48.090 回答
3

为什么不将异常处理放在循环中

for(){
     try{
         // someCode
     }catch(IOException e){
        //handle exception if necessary
     }
}
于 2012-12-18T09:09:59.070 回答
1

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

for(){
    try { 
            someCode
            ...
    } catch(IOException){
    }
}
于 2012-12-18T09:11:21.230 回答
1

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

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

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

于 2012-12-18T09:13:47.313 回答
1

这个有问题

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
      }

    }
于 2012-12-18T09:45:56.337 回答