0

タイトルが少しわかりにくい場合は申し訳ありません。

私のプログラムはいくつかのWebスクレイピングを実行しているため、ランダムなネットワーク状態のためにいくつかの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

これには問題があり、

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 に答える
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 に答える