首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R当字符串包含无法识别的转义时出现自定义错误消息

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

Stack Overflow用户
提问于 2018-08-30 04:53:20
回答 2查看 84关注 0票数 0

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

代码语言:javascript
运行
复制
my_string <- "sql\sql"
# Error: '\s' is an unrecognized escape in character string starting ""sql\s"

像这样的东西将是理想的。

代码语言:javascript
运行
复制
my_string <- "sql\sql"
# Error: my_string contains an unrecognized escape. Try sql\\sql with double backslashes instead.

我尝试了一个查找单个反斜杠的if语句。

代码语言:javascript
运行
复制
if (stringr::str_detect("sql\sql", "\")) stop("my error message")

但是我得到了同样的错误。

我几乎所有的用户都是运行R3.3或更高版本的Windows用户。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-31 01:03:43

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

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

因此,如果你指望你的用户编写像my_string <- "something"这样的代码,那么他们需要编写有效的代码。它们不能改变字符串的编码方式,也不能改变赋值操作符的外观,也不能改变变量的命名方式。它们也不能输入!my_string! <=== %something%,因为R也不能解析它。R不能解析my_string <- "sql\sql",但它可以解析my_string <- "sql\\sql" (斜杠可以在字符串文字中转义)。如果他们不是精明的用户,那么您可能需要考虑提供一个替代接口,该接口可以在尝试将用户输入作为代码运行之前对其进行清理。可以做一个漂亮的前端,或者让用户通过命令行参数将参数传递给您的脚本。

票数 2
EN

Stack Overflow用户

发布于 2018-08-30 05:01:56

如果您正确地捕获了用户输入,对于\的字符串输入,R会将其作为\\存储在my_string中。

代码语言:javascript
运行
复制
readline()
\
[1] "\\"

readline()
sql\sql
[1] "sql\\sql"

这意味着在R内部:

代码语言:javascript
运行
复制
my_string <- "sql\\sql"

然而,

代码语言:javascript
运行
复制
cat(my_string)

sql\sql

要检查输入,需要对每个转义进行转义,因为要查找的是\\

代码语言:javascript
运行
复制
stringr::str_detect(my_string, "\\\\")

如果输入字符串为sql\sql,则返回TRUE。所以完整的代码行是:

代码语言:javascript
运行
复制
if (stringr::str_detect("sql\\sql", "\\\\")) stop("my error message")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52085922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档