gpt4 book ai didi

抛出错误时,R 与正常错误一起无形地返回对象

转载 作者:行者123 更新时间:2023-12-04 07:58:44 26 4
gpt4 key购买 nike

我有一个可能会引发错误的函数。当抛出错误时,我想显示错误信息,就好像错误确实发生了一样,并进一步无形地返回了一个对象。
我看了this thread , 使用 withCallingHandlers并在某处记录错误消息。这很接近,但我不想将消息记录为文本然后打印文本消息,该函数应该显示错误消息,就好像它会因错误退出一样。
函数工作流如下所示:

foo <- function(x){

y <- x + 1

if(y == 2) {
stop("oops")
# also return y invisibly when error is thrown,
}

z <- y + 1
z

}
基于输入 x中级 y被计算。 y用于错误检查。如果发生错误 y应该不可见地返回,并且应该抛出一个正常的错误消息。否则 z计算返回。 foo(1)应该返回错误信息和 y无形。
我想过用 on.exit但在这种情况下,总是 y是无形的回归。
任何帮助表示赞赏。
补充:也许我的想法是不可能的。在这种情况下,是否可以以接近真实错误消息的方式显示记录的错误消息?
Add2:我想过发出警告,但在我的实际用例中是 warning会产生误导,因为该函数不会产生预期的结果 z ,但只是一些中间结果 y我想返回 y以便用户可以进一步检查它,并解释为什么它没有被 foo 正确处理。 .想了想,其他人肯定也遇到过同样的问题,应该有什么解决办法吧。
Add3:也许可以使用 on.exit连同一个被触发的标志,使得 on.exit将返回 y如果出现错误,则不可见,否则不执行任何操作。

最佳答案

func <- function(x) { a <- simpleError("quux"); attr(a,"abc") <- 7; stop(a); }
func()
# Error: quux
到目前为止一切顺利,我们看到了一个错误。如果我们捕获这个并查看错误消息的内容,我们可以看到隐藏在里面的属性:
dput(tryCatch(func(), error=function(e) e))
# structure(list(message = "quux", call = NULL), class = c("simpleError",
# "error", "condition"), abc = 7)
甚至可以轻松提取
dput(tryCatch(func(), error=function(e) attr(e,"abc")))
# 7

关于抛出错误时,R 与正常错误一起无形地返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66574267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com