2017-07-18 16 views
3

は、次の例を確認してください:なぜtryCatchは警告メッセージを生成するかを尋ねられたら警告を返しません。

library(testthat) 
expect_warning(tryCatch(stop("Error!"), error = function(e) warning(e))) 
## Error: tryCatch(stop("Error!"), error = function(e) warning(e)) showed 0 warnings 
## In addition: Warning message: 
## In doTryCatch(return(expr), name, parentenv, handler) : Error! 

はなぜtestthatには警告がなかったと言うのでしょうか?

withWarnings function discussed in hereを使用しても、警告の兆候は見られません。なぜそれが求められたら、tryCatchは警告を出しませんか?

答えて

2

doTryCatchwithCallingHandlersにネストされた呼び出しを作成しました。問題は、eが文字ではなく、simpleErrorオブジェクト(doTryCatchへの別の呼び出しを含む)です。次のように動作しますが、警告がスローされた実際のコンテキストを示します。

tryCatch(stop("Error!"), error = function(e) warning(e[[1]])) 
#Warning message: 
#In value[[3L]](cond) : Error! 
library(testthat) 
expect_warning(tryCatch(stop("Error!"), error = function(e) warning(e[[1]]))) 
#no further output 
関連する問題