附加的警告消息返回错误而不是警告

4

我有两个函数:f_会抛出一个错误,而f在调用f_之前会先抛出一个警告。

f_ <- function() stop()
f <- function() {
  warning()
  f_()
}

由于在错误之前我有一个警告,R会产生“附加的警告信息”,但是这个警告中的消息不是我的f警告,而是在第二次调用f_时产生的错误:

> f()
Error in f_() : 
In addition: Warning message:
In f() :
  Error in f_() :

如果错误是由同一个函数或内置函数产生的,那么它似乎按预期工作。

f <- function() {
  warning()
  stop()
}
> f()
Error in f() : 
In addition: Warning message:
In f() : 

有人能帮我理解那里发生了什么吗? 非常感谢任何帮助。 我正在使用 RStudio 运行 R 版本 3.3.2,操作系统是 x86_64-w64-mingw32。


我无法在 R 3.5 中重现这个问题。 - Karolis Koncevičius
1个回答

2
我认为这是由于Rstudio的错误检查器引起的。当遇到错误时,Rstudio会显示回溯和调试的可能性。我相信这是混淆的来源(包括我的)。"第二个"错误只是Rstudio中的一个功能,用于调试,如下所示。请注意右侧的两个按钮,允许您"显示回溯"和"重新运行调试"。

在Rstudio中 enter image description here

如下所示,如果您在终端中运行R,则不会出现此"附加"错误。

在终端中 enter image description here

在Rstudio的全局选项中,在常规选项卡下,您可以关闭使用调试错误处理程序。您也可以在调试 -> 在错误时执行此操作。然后,Rstudio将不会显示"附加"消息。

编辑:更新: 经过进一步调查,确实存在一些奇怪的情况。下面,我试图通过以下观察使错误和警告消息更具说明性:
  • 连续多次调用f()时,我并不完全清楚错误检查器何时出现,何时不出现。
  • 当错误检查器出现时,警告消息不会显示。当错误检查器未出现时,警告消息会显示。

我对Rstudio的内部一无所知,但这明显是错误检查器引起的这些小问题。

enter image description here


奇怪,是的,我正在使用Rstudio。 - Julien Navarre
1
结果似乎是一样的。我有遗漏什么吗? - Christoph
谢谢您提供的错误分析资料,真的非常有帮助。 - Julien Navarre
@JulienNavarre 很高兴能够帮助。 - Anders Ellern Bilgrau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接