Things work as I would expect if you give stop() a condition object instead of a string:
makeError <- function(message, class = "simpleError", call = sys.call(-2)) { structure(list(message=message, call=call), class=c(class, "error", "condition")) } f0 <- function() { on.exit(tryCatch(expr = stop("pb. in f0's on.exit"), error = function(e)cat("[error] caught", paste(collapse="/", class(e)), ":", conditionMessage(e), "\n"))) stop("pb. in f0") } f1 <- function() { on.exit(tryCatch(expr = stop(makeError("pb. in f1's on.exit", class="simpleError")), error = function(e)cat("[error] caught", paste(collapse="/", class(e)), ":", conditionMessage(e), "\n"))) stop(makeError("pb. in f1", class="simpleError")) } catch <- function(FUN) { tryCatch( expr = FUN(), error = function(e)paste("[error] caught", paste(collapse="/", class(e)), ":", conditionMessage(e))) } catch(f0) # calls stop("string") #[error] caught simpleError/error/condition : pb. in f0's on.exit #[1] "[error] caught simpleError/error/condition : pb. in f0's on.exit" catch(f1) # calls stop(conditionObject) #[error] caught simpleError/error/condition : pb. in f1's on.exit #[1] "[error] caught simpleError/error/condition : pb. in f1" Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, Dec 1, 2017 at 12:58 PM, William Dunlap <wdun...@tibco.com> wrote: > The following example involves a function whose on.exit() > expression both generates an error and catches the error. > The body of the function also generates an error. > > When calling the function wrapped in a tryCatch, should > that tryCatch's error function be given the error from the > body of the function, since the one from the on.exit has > already been dealt with? Currently the outer tryCatch gets > the error from the on.exit expression. > > xx <- function() { > on.exit(tryCatch( > expr = stop("error in xx's on.exit"), > error=function(e) { > cat("xx's on.exit caught error: <<", conditionMessage(e), ">>\n", > sep="") > })) > stop("error in body of xx") > } > zz <- tryCatch(xx(), error=function(e)paste("outer tryCatch caught error > <<", conditionMessage(e), ">>", sep="")) > #xx's on.exit caught error: <<error in xx's on.exit>> > zz > #[1] "outer tryCatch caught error <<error in xx's on.exit>>" > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel