This is a small wrapper around tryCatch() that captures any condition signalled while evaluating its argument. It is useful for situations where you expect a specific condition to be signalled, for debugging, and for unit testing.

catch_cnd(expr, classes = "condition")

Arguments

expr

Expression to be evaluated with a catching condition handler.

classes

A character vector of condition classes to catch. By default, catches all conditions.

Value

A condition if any was signalled, NULL otherwise.

Examples

catch_cnd(10)
#> NULL
catch_cnd(abort("an error"))
#> <error/rlang_error>
#> an error
#> Backtrace:
#>   1. base::tryCatch(...)
#>  13. pkgdown::build_site(...)
#>  14. pkgdown:::build_site_local(...)
#>  15. pkgdown::build_reference(...)
#>  16. purrr::map(...)
#>  17. pkgdown:::.f(.x[[i]], ...)
#>  19. pkgdown:::data_reference_topic(...)
#>  20. pkgdown:::run_examples(...)
#>  21. pkgdown:::highlight_examples(code, topic, env = env)
#>  22. downlit::evaluate_and_highlight(...)
#>  23. evaluate::evaluate(code, child_env(env), new_device = TRUE, output_handler = output_handler)
#>  24. evaluate:::evaluate_call(...)
#>  34. [ base::eval(...) ] with 1 more call
#>  36. rlang::catch_cnd(abort("an error"))
#>  42. base::force(expr)
catch_cnd(signal("my_condition", message = "a condition"))
#> <my_condition: a condition>