当我使用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。我正在寻找引发错误的输入。
答案 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"