R当字符串包含无法识别的转义时自定义错误消息

R当字符串包含无法识别的转义时自定义错误消息,r,regex,R,Regex,当我的R函数的用户提供一个带有无法识别转义的字符串时,我想给出一个更详细的错误消息 my_string <- "sql\sql" # Error: '\s' is an unrecognized escape in character string starting ""sql\s" 但我也犯了同样的错误 几乎所有my用户都是运行R3.3及以上版本的Windows用户。如果您正确捕获了用户输入,对于\的字符串输入,R将以\的形式将其存储在my\u string中 readline() \

当我的R函数的用户提供一个带有无法识别转义的字符串时,我想给出一个更详细的错误消息

my_string <- "sql\sql"
# Error: '\s' is an unrecognized escape in character string starting ""sql\s"
但我也犯了同样的错误


几乎所有my用户都是运行R3.3及以上版本的Windows用户。

如果您正确捕获了用户输入,对于
\
的字符串输入,R将以
\
的形式将其存储在
my\u string

readline()
\
[1] "\\"

readline()
sql\sql
[1] "sql\\sql"
这意味着在R中:

my_string <- "sql\\sql"
要检查输入,您需要对每个转义进行转义,因为您正在查找
\\

stringr::str_detect(my_string, "\\\\")
如果输入字符串为
sql\sql
,则返回
TRUE
。因此,全文如下:

if (stringr::str_detect("sql\\sql", "\\\\")) stop("my error message")

如果正确捕获用户输入,对于
\
的字符串输入,R将以
\
的形式将其存储在
my\u字符串中

readline()
\
[1] "\\"

readline()
sql\sql
[1] "sql\\sql"
这意味着在R中:

my_string <- "sql\\sql"
要检查输入,您需要对每个转义进行转义,因为您正在查找
\\

stringr::str_detect(my_string, "\\\\")
如果输入字符串为
sql\sql
,则返回
TRUE
。因此,全文如下:

if (stringr::str_detect("sql\\sql", "\\\\")) stop("my error message")

R中的代码执行分为两个阶段。首先,R获取您输入的原始字符串,并将其解析为可以运行的命令;然后,R实际运行这些命令。解析步骤确保您编写的代码实际上是有意义的。如果它没有任何意义,那么R甚至不能将它转换为它可以尝试运行的任何东西

您得到的有关无法识别的转义序列的错误消息发生在解析阶段。这意味着R甚至没有真正尝试执行命令,它只是无法理解你在说什么。在代码中无法捕捉到这样的错误,因为此时没有运行的用户代码


因此,如果您指望用户编写类似于
my_string的代码,那么R中的代码执行将分两个阶段进行。首先,R获取您输入的原始字符串,并将其解析为可以运行的命令;然后,R实际运行这些命令。解析步骤确保您编写的代码实际上是有意义的。如果它没有任何意义,那么R甚至不能将它转换为它可以尝试运行的任何东西

您得到的有关无法识别的转义序列的错误消息发生在解析阶段。这意味着R甚至没有真正尝试执行命令,它只是无法理解你在说什么。在代码中无法捕捉到这样的错误,因为此时没有运行的用户代码


因此,如果你指望你的用户编写像
my\u string这样的代码,你需要转义
my\u string@MrFlick,我喜欢你的回答,即让用户在适当的时候使用双反斜杠来编写有效的代码。我接受这一回答。您需要转义
my_string@MrFlick。我喜欢您的回答,即让用户在适当的情况下使用双反斜杠编写有效代码。我会接受这个答案