0

質問が素朴に聞こえる場合はご容赦ください。ファイル接続を再帰的にオープンしようとしcloseAllConnections()た後、tryCatch()ブロックに入ろうとすると、エラーが適切にキャッチされていないようです。

サンプルコードは次のとおりです。

fileOpenRec<-function(iter){
      if(iter<130){
       try(
        {
         aFile="file1.txt"
         fileCon<-file(aFile, "a")
         fileOpenRec(iter+1)
        }
       )
     }
    }

tryCatch(fileOpenRec(1), error=function(e){print("Error!");closeAllConnections()})

上記のコードは次Error in file(aFile, "a") : all connections are in useをスローし、接続を閉じません。それは期待される動作ですか?(私はそれを疑っています。ここに何かが欠けている場合は修正してください)

PS:接続を閉じるには、 a を追加してそこに閉じるなどの回避策はほとんどありませんfinally

4

1 に答える 1

0

比較

> tryCatch({ stop("oops"); 1 }, error=function(err) "caught")
[1] "caught"

> tryCatch({ try(stop("oops")); 1 }, error=function(err) "caught")
Error in try(stop("oops")) : oops
[1] 1

内側try()はエラーをキャッチ (および出力) するため、外側tryCatchは何もしません。コードから を削除try()します。

于 2013-08-16T01:18:12.353 に答える