[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