停止R脚本而不会收到“包装错误”消息

时间:2014-09-11 03:59:31

标签: r error-handling

我写了一个R脚本,它将消息(进度报告)写入文本文件。我修改了error选项,以便在发生错误时,错误消息也会写入该文件:

options(error = function() {
 cat(geterrmessage(),file = normalizePath("logs/messages.txt"),append = TRUE)
 stop()
})

它可以工作,但是当发生错误时我在控制台/终端窗口中收到此消息:

Error during wrapup:
Execution halted

所以我认为有一种更好的方法来中断脚本的执行......还是在那里?

1 个答案:

答案 0 :(得分:6)

我刚在R源代码中找到了这个:

if (inError) {
    /* fail-safe handler for recursive errors */
    if(inError == 3) {
         /* Can REprintf generate an error? If so we should guard for it */
        REprintf(_("Error during wrapup: "));
        /* this does NOT try to print the call since that could
           cause a cascade of error calls */
        Rvsnprintf(errbuf, sizeof(errbuf), format, ap);
        REprintf("%s\n", errbuf);
    }

stop()导致错误处理程序被执行。如果在错误处理程序中发生stop()调用,则R会显示Error during wrapup:消息,并阻止您进行无限递归,否则会发生。

请勿在{{1​​}}内致电stop()

使用options$error代替,它应该完全执行默认错误处理程序为非交互式使用所做的事情。有关错误处理的详细信息,请参阅q(save="no", status=1, runLast=FALSE)了解?optionsoptions$error的含义。