Signal an error, warning, or message
These functions are equivalent to base functions base::stop()
,
base::warning()
, and base::message()
, but make it easy to supply
condition metadata:
Supply class
to create a classed condition. Typed
conditions can be captured or handled selectively, allowing for
finer-grained error handling.
Supply metadata with named ...
arguments. This data will be
stored in the condition object and can be examined by handlers.
interrupt()
allows R code to simulate a user interrupt of the
kind that is signalled with Ctrl-C
. It is currently not possible
to create custom interrupt condition objects.
abort( message = NULL, class = NULL, ..., trace = NULL, parent = NULL, .subclass = deprecated() ) warn( message = NULL, class = NULL, ..., .frequency = c("always", "regularly", "once"), .frequency_id = NULL, .subclass = deprecated() ) inform( message = NULL, class = NULL, ..., .file = NULL, .frequency = c("always", "regularly", "once"), .frequency_id = NULL, .subclass = deprecated() ) signal(message, class, ..., .subclass = deprecated()) interrupt()
message |
The message to display. Character vectors are
formatted with If a message is not supplied, it is expected that the message is
generated lazily through conditionMessage(). In
that case, |
class |
Subclass of the condition. This allows your users to selectively handle the conditions signalled by your functions. |
... |
Additional data to be stored in the condition object. |
trace |
A |
parent |
A parent condition object created by |
.subclass |
This argument was renamed to |
.frequency |
How frequently should the warning or message be
displayed? By default ( |
.frequency_id |
A unique identifier for the warning or
message. This is used when |
.file |
Where the message is printed. This should be a
connection or character string which will be passed to By default, |
Unlike stop()
and warning()
, these functions don't include call
information by default. This saves you from typing call. = FALSE
and produces cleaner error messages.
A backtrace is always saved into error objects. You can print a
simplified backtrace of the last error by calling last_error()
and a full backtrace with summary(last_error())
.
You can also display a backtrace with the error message by setting
the option rlang_backtrace_on_error
. It supports the following
values:
"reminder"
: Invite users to call rlang::last_error()
to see a
backtrace.
"branch"
: Display a simplified backtrace.
"collapse"
: Display a collapsed backtrace tree.
"full"
: Display a full backtrace tree.
"none"
: Display nothing.
Signalling a condition with inform()
or warn()
causes a message
to be displayed in the console. These messages can be muffled with
base::suppressMessages()
or base::suppressWarnings()
.
On recent R versions (>= R 3.5.0), interrupts are typically
signalled with a "resume"
restart. This is however not
guaranteed.
with_abort()
to convert all errors to rlang errors.
# These examples are guarded to avoid throwing errors if (FALSE) { # Signal an error with a message just like stop(): abort("Something bad happened") # Give a class to the error: abort("Something bad happened", "somepkg_bad_error") # This will allow your users to handle the error selectively tryCatch( somepkg_function(), somepkg_bad_error = function(err) { warn(conditionMessage(err)) # Demote the error to a warning NA # Return an alternative value } ) # You can also specify metadata that will be stored in the condition: abort("Something bad happened", "somepkg_bad_error", data = 1:10) # This data can then be consulted by user handlers: tryCatch( somepkg_function(), somepkg_bad_error = function(err) { # Compute an alternative return value with the data: recover_error(err$data) } ) # If you call low-level APIs it is good practice to handle # technical errors and rethrow them with a more meaningful # message. Always prefer doing this from `withCallinghandlers()` # rather than `tryCatch()` because the former preserves the stack # on error and makes it possible for users to use `recover()`. file <- "http://foo.bar/baz" try(withCallinghandlers( download(file), error = function(err) { msg <- sprintf("Can't download `%s`", file) abort(msg, parent = err) })) # Note how we supplied the parent error to `abort()` as `parent` to # get a decomposition of error messages across error contexts. # Unhandled errors are saved automatically by `abort()` and can be # retrieved with `last_error()`. The error prints with a simplified # backtrace: abort("Saved error?") last_error() # Use `summary()` to print the full backtrace and the condition fields: summary(last_error()) }
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.