6

エラーを「キャッチ」してログに記録した後、それ以上コードステップが実行されないようにするにはどうすればよいですか (q() を使用したくありません)。

私の使用シナリオは次のようなものです: - いくつかの計算を行います - エラーが発生した場合はログに記録します - コード内のそれ以上のステップの実行を停止します

以下のコード例を使用してこれを解決しようとしました(実際のログ機能の代わりに印刷が使用されます):

handleMySimpleError<-function(e, text) {
    # Let's log the error
    print(paste0(text, ": ", e))
    # This should stop execution of any further steps but it doesn't
    stop("Now, stop. For real.")
}

print("Starting execution...")
tryCatch(
    stop("My simple error."),
    error=function(e) {handleMySimpleError(e, "could not finish due to")}, finnaly=NULL
)
print("Successfully ended execution...")

print("Successfully finished execution...") が実行されないことをどういうわけか望んでいました...しかし、ここに私が得る出力があります:

> handleMySimpleError<-function(e, text) {
+   # Let's log the error
+   print(paste0(text, ": ", e))
+   # This should stop execution of any further steps but it doesn't
+   stop("Now, stop. For real.")
+ }
>  
> print("Starting execution...")
[1] "Starting execution..."
> tryCatch(
+   stop("My simple error."),
+   error=function(e) {handleMySimpleError(e, "could not finish due to")}, finnaly=NULL
+ )
[1] "could not finish due to: Error in doTryCatch(return(expr), name, parentenv, handler): My simple error.\n"
Error in handleMySimpleError(e, "could not finish due to") : 
Now, stop. For real.
> print("Successfully ended execution...")
[1] "Successfully ended execution..."

print("実行に成功しました...") が実行されないようにするにはどうすればよいですか? エラーがエラーハンドラ関数に記録された後にコード処理を停止する正しい戦略は何ですか?

4

1 に答える 1

6

中括弧で囲むだけです

>     {
+       handleMySimpleError<-function(e, text) {
+           # Let's log the error
+           print(paste0(text, ": ", e))
+           # This should stop execution of any further steps but it doesn't
+           stop("Now, stop. For real.")
+       }
+       print("Starting execution...")
+       tryCatch(
+           stop("My simple error."),
+           error=function(e) {handleMySimpleError(e, "could not finish due to")}, finally=NULL
+       )
+       print("Successfully ended execution...") 
+     }
[1] "Starting execution..."
[1] "could not finish due to: Error in doTryCatch(return(expr), name, parentenv, handler): My simple error.\n"
Error in handleMySimpleError(e, "could not finish due to") : 
  Now, stop. For real.
于 2012-09-24T23:44:11.857 に答える