如何组合tryCatch和UseMethod?

时间:2014-04-04 02:02:28

标签: r

我正在尝试编写一些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"

有没有人对从哪里开始有任何建议?

1 个答案:

答案 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."