R:testthat中错误比较的意外行为
我正在实现一个helper函数,它根据模板检查所提供参数的长度,并在长度不同时抛出一个错误。以下是函数:R:testthat中错误比较的意外行为,r,error-handling,testthat,R,Error Handling,Testthat,我正在实现一个helper函数,它根据模板检查所提供参数的长度,并在长度不同时抛出一个错误。以下是函数: assert_character_vec_length <- function(x, ...) { name <- as.character(substitute(x)) lens <- unlist(list(...)) lnames <- as.character(substitute(list(...)))[-1] lnames <
assert_character_vec_length <- function(x, ...) {
name <- as.character(substitute(x))
lens <- unlist(list(...))
lnames <- as.character(substitute(list(...)))[-1]
lnames <- paste(lnames, collapse=' or ')
if(!(length(x) %in% lens) | !is.character(x))
stop(paste0('"', name, '"', ' must be a character vector with length ', lnames))
}
但令我惊讶的是,当我使用表达式比较长度时,错误消息不匹配:
err2 <- '"grp" must be a character vector with length ncol(x)'
expect_error(assert_character_vec_length(grp, ncol(x)), err2)
err2看一看?预期输出
:
第二个参数名为“regexp”,
事实上,
它被用作一个正则表达式来测试
(
和)
在正则表达式中有特殊含义,
称为捕获组。
如前所述,这些(
和)
将与错误消息中的文字“(“和”)”字符不匹配
要使它们与文字括号匹配,需要对其进行转义:
err2 <- '"grp" must be a character vector with length ncol\\(x\\)'
expect_error(assert_character_vec_length(grp, ncol(x)), err2)
err2非常感谢!完全错过了。我在想“grp”…
和“grp\”…
之间的区别,以及是什么导致了它(根据错误消息)
err2 <- '"grp" must be a character vector with length ncol(x)'
expect_error(assert_character_vec_length(grp, ncol(x)), err2)
expect_output(object, regexp = NULL, ..., info = NULL, label = NULL)
err2 <- '"grp" must be a character vector with length ncol\\(x\\)'
expect_error(assert_character_vec_length(grp, ncol(x)), err2)