【发布时间】:2017-02-19 05:10:12
【问题描述】:
我在服务器上运行了许多无人参与的 R 批处理作业,我必须在它们运行后分析作业失败。
我正在尝试捕获错误以记录它们并从错误中正常恢复,但我无法获取堆栈跟踪 (traceback) 以记录导致错误的 R 命令的代码文件名和行号.一个(愚蠢的)可重现的例子:
f <- function() {
1 + variable.not.found # stupid error
}
tryCatch( f(), error=function(e) {
# Here I would log the error message and stack trace (traceback)
print(e) # error message is no problem
traceback() # stack trace does NOT work
# Here I would handle the error and recover...
})
运行上面的代码会产生这个输出:
f() 中的simpleError:找不到对象'variable.not.found'
没有可用的回溯
回溯不可用,原因记录在 R 帮助 (?traceback) 中:
通过 try 或 tryCatch 捕获的错误不会生成 回溯,所以打印的是最后一个调用序列 未捕获的错误,不一定是最后一个错误。
换句话说:使用tryCatch 捕获错误确实会杀死堆栈跟踪!
我该怎么做
- 处理错误和
- 记录堆栈跟踪(回溯)以供进一步检查
- [可选] 不使用无法保证在未来正常工作的未记录或隐藏的 R 内部函数?
非常感谢!
【问题讨论】:
标签: r logging error-handling