语法
tryCatch({
# 需要检查的代码
}, warning = function(w){
# 出现warning状态时,应该怎么做,可以用print打印出来,可以执行其它命令
}, error = function(e){
# 出现Error状态时,应该怎么做,可以用print打印出来,也可以执行其它命令
},finally = {
# 一定会被执行的代码
})
示例
x为一个未定义变量,print(x)会报error
> print(x)
Error in print(x) : object 'x' not found
1. 仅进行输出的异常处理
tryCatch({
print(x)
},
warning = function(w){
print("warning")
},
error = function(e){
print("error")
})
输出结果
[1] "error"
2. 对变量进行修改的异常处理
错误方法:在异常错误处理代码部分对变量进行了处理,但是发现变量并未改变
flag<-FALSE
tryCatch({
print(x)
},
error = function(e){
flag<-TRUE
print(flag)
})
输出结果
[1] TRUE
然而输出flag,依然为FALSE
> print(flag)
[1] FALSE
正确方法:使用<<-
对变量进行修改(一般用于函数内部,然后会搜索包括父层级在内的被定义的变量然后赋值)
flag<-FALSE
tryCatch({
print(x)
},
error = function(e){
flag<<-TRUE
print(flag)
})
输出结果
[1] TRUE
输出flag
> print(flag)
[1] TRUE
参考
R语言tryCatch使用方法:判断Warning和Error
rtrycatch块中的变量作用域:是否<-必须更改tryCatch之前定义的局部变量?