tryCatch in on.exit()

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

tryCatch in on.exit()

R devel mailing list
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]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: tryCatch in on.exit()

R devel mailing list
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 <[hidden email]> 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]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: tryCatch in on.exit()

luke-tierney
In reply to this post by R devel mailing list
Thanks -- will look into it.

luke

On Fri, 1 Dec 2017, William Dunlap via R-devel 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]]
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

--
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:   [hidden email]
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: tryCatch in on.exit()

luke-tierney
This should now be resolved in R-devel and R_patched.

Best,

luke

On Fri, 1 Dec 2017, [hidden email] wrote:

> Thanks -- will look into it.
>
> luke
>
> On Fri, 1 Dec 2017, William Dunlap via R-devel 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]]
>>
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
>

--
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:   [hidden email]
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel