[R] error handling

Michael Meyer spyqqqdia at yahoo.com
Thu Sep 26 09:57:10 CEST 2013


Greetings,
 
Error handling does not seem to work as expected.
When a handler for general conditions is provided in first position in the handler list it will be called 
regardless of what condition has been signalled.
 
See sample code, move  "condition = function(c){...}" to first position in handler list.
This indicates that the determination of which condition handler is appropriate does not work like
virtual function dispatch.
 
I also would like to know what happens if some handlers are not provided.
For example if a warning handler is not provided and a warning is signalled does this invoke a
default handler and how does this handler know which value to return from the tryCatch block.
 
Thanks,
 
Michael
 
 
 
# Function signals various conditions
#
prejudiced <- function(x){
 
    cl <- call("prejudiced",x)

    # throw various conditions with message and information about function call
    if(x==0) signalCondition( simpleCondition("x=0 encountered",call=cl) )
    if(x==1) signalCondition( simpleMessage("Do not like 1",call=cl) )
    if(x==2) signalCondition( simpleWarning("Hate 2",call=cl) )
    if(x==3) signalCondition( simpleError("Cannot tolerate 3",call=cl) )
    return(x)
}
tryCatchTest <- function(x){
    
actual <- tryCatch({
                # expressions evaluated until condition signalled:
                -1
                prejudiced(x)
                4  # returned if no condition is signalled
            },
            # condition handlers return new value as result of tryCatch:
            message = function(m){ print(m); 6},
            warning = function(w){ print(w); 7},
            error   = function(e){ print(e); 8},
            # must be put last otherwise it is called for any condition
            condition = function(c){ print(c); 5},
            finally = { cat("\nCleaned up.") }
    )
    # result of tryCatch:
    expected <- 4
    if(x==0) expected <- 5
    if(x==1) expected <- 6
    if(x==2) expected <- 7
    if(x==3) expected <- 8
    cat("\nResult of tryCatch should be ",expected," and is: ",actual)
}




More information about the R-help mailing list