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.
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.
Examples
catch_cnd(10)
#> NULL
catch_cnd(abort("an error"))
#> <error/rlang_error>
#> Error:
#> ! an error
#> ---
#> Backtrace:
#> ▆
#> 1. └─pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)
#> 2. └─pkgdown::build_site(...)
#> 3. └─pkgdown:::build_site_local(...)
#> 4. └─pkgdown::build_reference(...)
#> 5. └─purrr::map(...)
#> 6. └─purrr:::map_("list", .x, .f, ..., .progress = .progress)
#> 7. ├─purrr:::with_indexed_errors(...)
#> 8. │ └─base::withCallingHandlers(...)
#> 9. ├─purrr:::call_with_cleanup(...)
#> 10. └─pkgdown (local) .f(.x[[i]], ...)
#> 11. ├─base::withCallingHandlers(...)
#> 12. └─pkgdown:::data_reference_topic(...)
#> 13. └─pkgdown:::run_examples(...)
#> 14. └─pkgdown:::highlight_examples(code, topic, env = env)
#> 15. └─downlit::evaluate_and_highlight(...)
#> 16. └─evaluate::evaluate(code, child_env(env), new_device = TRUE, output_handler = output_handler)
#> 17. └─evaluate:::evaluate_call(...)
#> 18. ├─evaluate (local) timing_fn(...)
#> 19. ├─evaluate (local) handle(...)
#> 20. │ └─base::try(f, silent = TRUE)
#> 21. │ └─base::tryCatch(...)
#> 22. │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
#> 23. │ └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
#> 24. │ └─base (local) doTryCatch(return(expr), name, parentenv, handler)
#> 25. ├─base::withCallingHandlers(...)
#> 26. ├─base::withVisible(...)
#> 27. └─evaluate:::eval_with_user_handlers(expr, envir, enclos, user_handlers)
#> 28. └─base::eval(expr, envir, enclos)
#> 29. └─base::eval(expr, envir, enclos)
catch_cnd(signal("my_condition", message = "a condition"))
#> <my_condition: a condition>