我有一个通用函数来捕获我的包中logR::tryCatch2 定义的所有异常,定义如下:
tryCatch2 <- function(expr){
V=E=W=M=I=NULL
e.handler = function(e){
E <<- e
NULL
}
w.handler = function(w){
W <<- c(W, list(w))
invokeRestart("muffleWarning")
}
m.handler = function(m){
attributes(m$call) <- NULL
M <<- c(M, list(m))
}
i.handler = function(i){
I <<- i
NULL
}
V = suppressMessages(withCallingHandlers(
tryCatch(expr, error = e.handler, interrupt = i.handler),
warning = w.handler,
message = m.handler
))
list(value=V, error=E, warning=W, message=M, interrupt=I)
}
Run Code Online (Sandbox Code Playgroud)
正如您在最后一行中所看到的,它返回一个或多或少自我描述的列表.
它tryCatch2通过简单的方式对调用后延迟的异常做出真正的反应!is.null:
f = function(){ warning("warn1"); warning("warn2"); stop("err") }
r …Run Code Online (Sandbox Code Playgroud)