gpt4 book ai didi

r - 嵌套的 tryCatch 没有捕捉到错误?

转载 作者:行者123 更新时间:2023-12-04 10:59:23 27 4
gpt4 key购买 nike

我有一个函数:

buggy <- function(...) {
tryCatch({
itWorked <- FALSE
stop("I don't like green eggs and ham!")
itWorked <- TRUE
}, finally = {
if ( itWorked )
return("I do, Sam I am")
else
return("I do not like them, Sam I am!")
})
}

基本上,buggy 会尝试进行一些可能会或可能不会成功的计算(由 itWorked 确定)。finally 子句只是确保即使计算无效,也会返回一些内容(在本例中,“我不喜欢他们,Sam,我喜欢!”)。

它按预期工作:

> buggy()
Error in tryCatchList(expr, classes, parentenv, handlers) :
I don't like green eggs and ham!
[1] "I do not like them, Sam I am!"

现在我想在 buggy() 中监听错误:

tryCatch( buggy(), 
error=function(e) message('too bad! there was an error') )

但是 buggy 中的错误未能在周围的 tryCatch 中引发错误:

> tryCatch( buggy(), 
+ error=function(e) message('too bad! there was an error') )
[1] "I do not like them, Sam I am!"

我希望这会说:

'too bad! there was an error'
[1] "I do not like them, Sam I am!"

谁能告诉我为什么这不起作用?我是否需要以某种方式从 buggy 中“引发”错误?

最佳答案

外层 tryCatch() 没有给你存储在它的 error 参数中的消息,因为 exactly 以下调用的原因相同不:

tryCatch("I do not like them, Sam I am!",
error=function(e) message('too bad! there was an error') )
# [1] "I do not like them, Sam I am!"

仅当 buggy() 返回错误时,才会调用两行 error 参数中的消息。但是相反(感谢其中的 tryCatch() 的工作),buggy() 只返回一个字符向量,而 tryCatch() 没有什么可“捕捉”的:

value <- buggy()
value
# [1] "I do not like them, Sam I am!"

# And, to belabor the point:
identical(buggy(), "I do not like them, Sam I am!")
# [1] TRUE

关于r - 嵌套的 tryCatch 没有捕捉到错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222422/

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