# try_fetch() checks inputs Code (expect_error(try_fetch(NULL, function(...) NULL))) Output Error in `try_fetch()`: ! `...` must be named with condition classes. # can rethrow from `try_fetch()` Code err <- catch_error(try_fetch(f(), error = function(cnd) abort("bar", parent = cnd))) print(err) Output Error: ! bar Caused by error in `h()`: ! foo --- Backtrace: x 1. +-rlang:::catch_error(...) 2. | \-rlang::catch_cnd(expr, "error") 3. | +-rlang::eval_bare(...) 4. | +-base::tryCatch(...) 5. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 6. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 7. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 8. | \-base::force(expr) 9. +-rlang::try_fetch(f(), error = function(cnd) abort("bar", parent = cnd)) 10. | +-base::tryCatch(...) 11. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 12. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 13. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 14. | \-base::withCallingHandlers(...) 15. \-rlang (local) f() 16. \-rlang (local) g() 17. \-rlang (local) h() Code print(err, simplify = "none") Output Error: ! bar Caused by error in `h()`: ! foo --- Backtrace: x 1. +-rlang:::catch_error(...) 2. | \-rlang::catch_cnd(expr, "error") 3. | +-rlang::eval_bare(...) 4. | +-base::tryCatch(...) 5. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 6. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 7. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 8. | \-base::force(expr) 9. +-rlang::try_fetch(f(), error = function(cnd) abort("bar", parent = cnd)) 10. | +-base::tryCatch(...) 11. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 12. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 13. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 14. | \-base::withCallingHandlers(...) 15. \-rlang (local) f() 16. \-rlang (local) g() 17. \-rlang (local) h() Code err <- catch_error(high1(chain = TRUE)) print(err) Output Error in `high3()`: ! bar Caused by error in `h()`: ! foo --- Backtrace: x 1. +-rlang:::catch_error(high1(chain = TRUE)) 2. | \-rlang::catch_cnd(expr, "error") 3. | +-rlang::eval_bare(...) 4. | +-base::tryCatch(...) 5. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 6. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 7. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 8. | \-base::force(expr) 9. \-rlang (local) high1(chain = TRUE) 10. \-rlang (local) high2(...) 11. \-rlang (local) high3(...) 12. +-rlang::try_fetch(f(), error = function(cnd) abort("bar", parent = cnd)) 13. | +-base::tryCatch(...) 14. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 15. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 16. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 17. | \-base::withCallingHandlers(...) 18. \-rlang (local) f() 19. \-rlang (local) g() 20. \-rlang (local) h() Code print(err, simplify = "none") Output Error in `high3()`: ! bar Caused by error in `h()`: ! foo --- Backtrace: x 1. +-rlang:::catch_error(high1(chain = TRUE)) 2. | \-rlang::catch_cnd(expr, "error") 3. | +-rlang::eval_bare(...) 4. | +-base::tryCatch(...) 5. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 6. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 7. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 8. | \-base::force(expr) 9. \-rlang (local) high1(chain = TRUE) 10. \-rlang (local) high2(...) 11. \-rlang (local) high3(...) 12. +-rlang::try_fetch(f(), error = function(cnd) abort("bar", parent = cnd)) 13. | +-base::tryCatch(...) 14. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 15. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 16. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 17. | \-base::withCallingHandlers(...) 18. \-rlang (local) f() 19. \-rlang (local) g() 20. \-rlang (local) h() Code err <- catch_error(high1(chain = FALSE)) print(err) Output Error in `high3()`: ! bar --- Backtrace: x 1. +-rlang:::catch_error(high1(chain = FALSE)) 2. | \-rlang::catch_cnd(expr, "error") 3. | +-rlang::eval_bare(...) 4. | +-base::tryCatch(...) 5. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 6. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 7. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 8. | \-base::force(expr) 9. \-rlang (local) high1(chain = FALSE) 10. \-rlang (local) high2(...) 11. \-rlang (local) high3(...) 12. +-rlang::try_fetch(f(), error = function(cnd) abort("bar", parent = NA)) 13. | +-base::tryCatch(...) 14. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 15. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 16. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 17. | \-base::withCallingHandlers(...) 18. \-rlang (local) f() 19. \-rlang (local) g() 20. \-rlang (local) h() Code print(err, simplify = "none") Output Error in `high3()`: ! bar --- Backtrace: x 1. +-rlang:::catch_error(high1(chain = FALSE)) 2. | \-rlang::catch_cnd(expr, "error") 3. | +-rlang::eval_bare(...) 4. | +-base::tryCatch(...) 5. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 6. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 7. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 8. | \-base::force(expr) 9. \-rlang (local) high1(chain = FALSE) 10. \-rlang (local) high2(...) 11. \-rlang (local) high3(...) 12. +-rlang::try_fetch(f(), error = function(cnd) abort("bar", parent = NA)) 13. | +-base::tryCatch(...) 14. | | \-base (local) tryCatchList(expr, classes, parentenv, handlers) 15. | | \-base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]]) 16. | | \-base (local) doTryCatch(return(expr), name, parentenv, handler) 17. | \-base::withCallingHandlers(...) 18. \-rlang (local) f() 19. \-rlang (local) g() 20. \-rlang (local) h()