在顶层调用错误?

时间:2012-06-23 21:15:03

标签: r error-handling

当我使用tryCatch时,我可以定义错误处理程序并使用conditionCall来确定导致错误的调用。例如,

tryCatch(
    eval(parse(text="prnit('Hello')")),
    error=function(e) {
      cl <- conditionCall(e)
      #...
    })

我可以在R提示符上找到错误的电话吗?到现在为止,我发现只有这个解决方案:

> err_hdl  <- function() {
    file1 <- tempfile("Rrawhist")
    savehistory(file1)
    rawhist <- readLines(file1)
    unlink(file1)

    cat("Error : ", tail(rawhist,1), "\n")
    return(TRUE)    
}
> options(error=err_hdl)
> prnit("Hello")

但我相信必须有一种更直接的方式..

任何暗示都赞赏!

我拿出了赏金。在没有独立于平台的文件I / O的情况下,实现上述err_hdl函数行为的第一个答案将被接受。

编辑 - 上面的代码似乎只适用于Windows。我正在寻找引发错误的输入。

1 个答案:

答案 0 :(得分:2)

看起来dump.frames可以被告知不要转储到文件而是转移到.GlobalEnv中的对象。但是,除了Mac之外,我还没有测试过它。以下是否有帮助?

err_hdl2 <- function() {
  dump.frames("theErr", to.file = FALSE)
  cat("What happened?\n", attr(theErr,"error.message"), "\nOh.\n")
}
options(error = err_hdl2)

> prnit(dt)
Error: could not find function "prnit"
What happened?
 Error: could not find function "prnit"

Oh.

我想在全局环境中创建对象theErr可能有一个缺点。

> theErr
$`function () 
{
    dump.frames("theErr", to.file = FALSE)
    cat("What`
<environment: 0x1030fe140>

attr(,"error.message")
[1] "Error: could not find function \"prnit\"\n"
attr(,"class")
[1] "dump.frames"