允许通过tryCatch传递null

时间:2018-11-25 21:15:02

标签: r try-catch

我有一个简单的函数,用于检查两个提供的参数是否为字符,如果不是,则抛出错误

check_args_are_chr <- function(arg1, arg2){
  tryCatch({
    stopifnot(is.character(arg1), is.character(arg2))},
    error = function(e) stop("Arguments must be supplied as characters"))

}

check_args_are_chr("one", 2)
> Error in value[[3L]](cond) : Arguments must be supplied as characters

但是,arg2是一个可选参数,并不总是传递给函数。 NULL也是一个可接受的值

我想将其合并,因此传递给stopifnot的expr为

is.character(arg2) && is.null(arg2)

check_args_are_chr <- function(arg1, arg2){
  tryCatch({
    stopifnot(is.character(arg1), is.character(arg2) && is.null(arg2))},
    error = function(e) stop("Arguments must be supplied as characters"))

}

但这仍然使tryCatch引发异常。如何修改此设置,使可接受的类为characterNULL

2 个答案:

答案 0 :(得分:1)

首先,您的代码无法正常工作,因为您将(二进制) || &&

混淆了

第二,以这种方式使用tryCatch实际上没有意义。只需执行if (...) stop("Arguments must be supplied as characters")。不利的一面是,if语句比使用tryCatch更为笨拙,但不那么笨拙。

答案 1 :(得分:0)

使用missing来检查是否提供了arg2

 (missing(arg2) || (is.null(arg2) || is.character(arg2)))

或设置默认值arg2 = NULL