当存在多行调用时,潜在错误仅包括 match.call() 的第一行,导致一些信息丢失和句子不完整。一个简单的例子:
#proper error message:
runif(n=1, k=5)
#incomplete error message:
runif(n=1, k={5})
有什么方法可以让 R 包含对错误消息的完整调用(可能通过折叠多行左右)?我最感兴趣的是在 tryCatch 设置中使用它。
我尝试通过以下方式调查tryCatch
设置中的错误对象:
tryCatch( runif(n=1,k={5}),
error = function(e) recover() )
然后选择第4个环境(value[[3]](cond)
)进行检查e
。
我注意到那e$call
是:
Browse[1]> e$call
runif(n = 1, k = {
5
})
所以似乎错误消息只使用了第一行。
您可以将所有行折叠在一起:
Browse[1]> paste(deparse(e$call),collapse='')
[1] "runif(n = 1, k = { 5})"
所以你可以尝试这样的事情:
tryCatch( runif(n=1,k={5}),
error = function(e) {
cat(sprintf('Error in %s: %s\n',
paste(deparse(e$call),collapse=''),
e$message))
} )
但这并不能修复错误消息本身,只是导致它的调用:
runif 中的错误(n = 1,k = { 5}):未使用的参数(s)(k = {
所以“xxx 中的错误”是完整的,但“未使用的参数 xxx”仍然没有。这是一个开始,但并非一直如此。
我不确定如何改进这一点(并且我也有兴趣知道它是否可能)。