【发布时间】:2018-09-24 15:38:25
【问题描述】:
我正在开发一个 R 包,其中相同的输入检查函数由导出给用户的多个“实际”函数调用。如果我使用简单的stop() 调用,错误消息会说输入检查功能中发生错误,这没什么用...
我想我可以通过将输入检查函数的调用包装在tryCatch() 中来解决这个问题,然后在外部函数中处理错误。这主要是我想要的,但并没有完全给出我想要的输出。我最接近的是以下:
f <- function(i) {
tryCatch({
check_input(i)
}, error = function(e) stop("in f: ", e$message, call. = FALSE)
)
}
check_input <- function(i) {
if(i < 0)
stop("i is negative, value given was ", i)
}
f(-1)
# Error: in f: i is negative, value given was -1
理想情况下,我希望错误消息是
Error in f: i is negative, value given was -1
,如果在 f() 而不是 check_input() 中调用 stop,就会出现这种情况。
【问题讨论】:
-
将调用函数的名称传递给
check_input函数并在那里格式化错误消息可能会更容易。但是没有办法欺骗stop()函数中的构建,以使用一个函数名称,而不是实际发生停止的函数。您需要自己格式化消息, -
谢谢@MrFlick,我自己只是在玩
sys.call(),但错过了deparse()的使用。我将把它打开一段时间,但听起来它已经尽可能接近了。
标签: r error-handling