| Title: | Simplified Error Handling |
|---|---|
| Description: | Alternative to using withCallingHandlers() in the simple case of catch and rethrow. The `%!%` operator evaluates the expression on its left hand side, and if an error occurs, the right hand side is used to construct a new error that embeds the original error. |
| Authors: | Romain François [aut, cre], tada.science [cph, fnd] |
| Maintainer: | Romain François <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 2024.4.1.9000 |
| Built: | 2026-05-29 09:59:30 UTC |
| Source: | https://github.com/tadascience/slap |
Slap Operator
expr %!% message expr %!!% messageexpr %!% message expr %!!% message
expr |
An expression or quosure to evaluate carefully |
message |
A message meant to be formatted by |
If expr succeeds, its result is returned.
When expr generates an error, the %!% and %!!% operators
catch it and embed it in a new error thrown by cli::cli_abort().
If message evaluates to a character vector, it is used as the
message argument of cli::cli_abort().
If message evaluates to a function, the function is called with one
argument: the caught error from evaluating expr.
When the current environment has an error_call object, it is
used as the call argument of cli::cli_abort().
# g() throws an error g <- function() { stop("ouch") } # h() catches that error and embed it in a new error # with "bam" as its message, the g() error as the parent error, # and the caller environment as call= h <- function(error_call = rlang::caller_env()) { g() %!% "bam" } # f() will be used as the error call f <- function() { h() } # Error in `f()`: # ! bam # Caused by error in `g()`: # ! ouch tryCatch(f(), error = function(err) { print(err, backtrace = FALSE) })# g() throws an error g <- function() { stop("ouch") } # h() catches that error and embed it in a new error # with "bam" as its message, the g() error as the parent error, # and the caller environment as call= h <- function(error_call = rlang::caller_env()) { g() %!% "bam" } # f() will be used as the error call f <- function() { h() } # Error in `f()`: # ! bam # Caused by error in `g()`: # ! ouch tryCatch(f(), error = function(err) { print(err, backtrace = FALSE) })