gpt4 book ai didi

r - tryCatch 错误范围{}

转载 作者:行者123 更新时间:2023-12-02 09:37:18 27 4
gpt4 key购买 nike

这将输出“未发现错误!”两次,

x<-"no error found!"
dontchangex <- function()
{
tryCatch(
{
x<- "break this"+1
},error= function(e)
{
x<-"oh no :("
})
print(x)
}
dontchangex()
print(x)

由于错误范围{}。如何从错误内部访问父范围?编辑:我想进入 tryCatch 的范围,而不是突破到全局范围。也就是说,这应该打印“哦不:(”“没有发现错误!”

最佳答案

使用<<-

x<-"no error found!"
tryCatch(
{
x<- "break this"+1
},error= function(e)
{
x <<- conditionMessage(e)
})
print(x)

但我想知道用例是什么?也许您想让用户知道出了问题,但使用一些哨兵以便您可以继续处理。然后,您可能希望将错误强制为不太严重的错误,例如 warning() 或 message(),并从 tryCatch() 返回哨兵

f = function() {
if (runif(1) > .8) stop("oops")
TRUE
}

g = function() {
## on error, warn user but continue with sentinel 'FALSE'
tryCatch(f(), error=function(err) {
warning(conditionMessage(err))
NA
})
}

> options(warn=1)
> replicate(10, g())
Warning in value[[3L]](cond) : oops
Warning in value[[3L]](cond) : oops
[1] TRUE TRUE TRUE TRUE TRUE TRUE NA NA TRUE TRUE

如果您担心范围,那么

x <- 1
fun = function() {
x <- "OK"
tryCatch(stop("oops"), error=function(e) x <<- conditionMessage(e))
x
}

> fun()
[1] "oops"
> x
[1] 1

显示<<-分配给封闭环境(的层次结构)中的第一个匹配符号,因​​此不一定在全局环境中。

“封闭”环境是指定义函数的环境,而不是调用函数的“父框架”或环境。对一个人对原理理解的或多或少具有挑战性的测试是采取这个

f = function() {
x <- 0
function() {
tryCatch({
stop("oops")
}, error=function(e) {
x <<- conditionMessage(e)
})
ls()
}
}

并解释以下行为

> f0 <- f()
> environment(f0)[["x"]]
[1] 0
> f0 <- f()
> environment(f0)[["x"]]
[1] 0
> f0()
character(0)
> environment(f0)[["x"]]
[1] "oops"
> x
Error: object 'x' not found

关于r - tryCatch 错误范围{},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24206531/

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