我正在尝试编写一些S3方法,我希望它们能够共享常见的错误处理代码。这对我来说似乎是显而易见的方式:
myMethod <- function(x) {
tryCatch(UseMethod("myMethod", x), error=function(e) paste("Caught:", e))
}
myMethod.default <- function(x) print("Default.")
但它不起作用,因为UseMethod
不喜欢被tryCatch
包裹:
myMethod(0)
[1] "Caught: Error in UseMethod(\"myMethod\", x): 'UseMethod' used in an inappropriate fashion\n"
有没有人对从哪里开始有任何建议?
答案 0 :(得分:2)
包装它。
myMethod <- function(x) {
fn <- function() UseMethod("myMethod", x)
tryCatch(fn(), error = function(e) paste("Caught:", e))
}
myMethod.default <- function(x) print("Default.")
myMethod(structure('1', class='default'))
# [1] "Default."