phii m@iii@g oii phiiipsmith@c@
2021-Feb-07 19:30 UTC
[R] Difficulty using the tryCatch() function
I need help using the tryCatch function. I have a function and I want to surround it with tryCatch to catch errors and thereby avoid stopping execution of my program if the function fails. In my reproducible example below I have used a very simply function that just adds two numbers together. My function, called Adn, compiles, but when executed it generates the message: "Error in tryCatch({ : condition handlers must be specified with a condition class". I do not understand the error message. # Reproducible example for using tryCatch Adn <- function(x,y) { out <- tryCatch( { x+y }, { warning = function(cond) { message("There was a warning.") message("Here is the original warning message:") message(cond) return(100) } }, { error = function(cond) { message("There was an error.") message("Here is the original error message:") message(cond) return(200) } }, finally = { message("Error handling done.") } ) if (out==100 | out==200) { z <- 0 } else { z <- x+y } return(z) } (result <- Adn(1,sqrt(2))) # should work fine (result <- Adn(1,sqrt(-2))) # should catch a warning and set z to 0 (result <- Adn(1,"a")) # should catch an error and set z to 0
Too many curly braces. warning and error need to be arguments to tryCatch. On February 7, 2021 11:30:59 AM PST, phil at philipsmith.ca wrote:>I need help using the tryCatch function. I have a function and I want >to >surround it with tryCatch to catch errors and thereby avoid stopping >execution of my program if the function fails. In my reproducible >example below I have used a very simply function that just adds two >numbers together. My function, called Adn, compiles, but when executed >it generates the message: "Error in tryCatch({ : condition handlers >must >be specified with a condition class". I do not understand the error >message. > ># Reproducible example for using tryCatch > >Adn <- function(x,y) { > out <- tryCatch( > { > x+y > }, > { > warning = function(cond) { > message("There was a warning.") > message("Here is the original warning message:") > message(cond) > return(100) > } > }, > { > error = function(cond) { > message("There was an error.") > message("Here is the original error message:") > message(cond) > return(200) > } > }, > finally = { > message("Error handling done.") > } > ) > if (out==100 | out==200) { z <- 0 } > else { z <- x+y } > return(z) >} >(result <- Adn(1,sqrt(2))) # should work fine >(result <- Adn(1,sqrt(-2))) # should catch a warning and set z to 0 >(result <- Adn(1,"a")) # should catch an error and set z to 0 > >______________________________________________ >R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >https://stat.ethz.ch/mailman/listinfo/r-help >PLEASE do read the posting guide >http://www.R-project.org/posting-guide.html >and provide commented, minimal, self-contained, reproducible code.-- Sent from my phone. Please excuse my brevity.
try removing the outermost '{'...'}'. e.g., { warning = ... } should be 'warning = ...'. ---- Adn <- function(x,y) { out <- tryCatch( { x+y }, warning = function(cond) { message("There was a warning.") message("Here is the original warning message:") message(cond) return(100) }, error = function(cond) { message("There was an error.") message("Here is the original error message:") message(cond) return(200) }, finally = { message("Error handling done.") } ) if (out==100 | out==200) { z <- 0 } else { z <- x+y } return(z) } (result <- Adn(1,sqrt(2))) # should work fine (result <- Adn(1,sqrt(-2))) # should catch a warning and set z to 0 (result <- Adn(1,"a")) # should catch an error and set z to 0