tryCatch在处理程序中打印表达式

时间:2017-09-06 18:03:02

标签: r

基本上,尝试以下内容:

tryCatch(expr = {stop("stop message")},
         error = function(e) {
           cat(conditionMessage(e))
           cat(as.character(expr))
         })

期望输出类似于:"stop(\"stop message\")",但由于无法找到expr而失败...任何方式在范围内打印expr而无需执行以下操作?

expr <- eval('stop("stop message")')
tryCatch(expr = {expr},
         error = function(e) {
           cat(conditionMessage(e))
           cat(as.character(expr))
         })

1 个答案:

答案 0 :(得分:1)

我不确定我是否真的推荐这个,但你可以走上调用堆栈找到tryCatch调用并在那里提取参数。这是一个帮助函数,用于在调用堆栈中查找调用

findStackFun <- function(fun) {
  for(cx in sys.calls()) {
    if (deparse(cx[[1]]) == fun) {
      return(cx)
    }
  }
  return(NULL)
}

然后你可以运行

tryCatch(expr = {stop("stop message")},
         error = function(e) {
           cat(conditionMessage(e))
           call <- findStackFun("tryCatch")
           cat(deparse(call$expr))
         })