@@ -82,6 +82,11 @@ defmodule Exception do
8282
8383 @ doc """
8484 Gets the message for an `exception`.
85+
86+ This function will invoke the `c:message/1` callback on the exception
87+ module to retrieve the message. If the callback raises an exception or
88+ returns a non-binary value, this function will rescue the error and
89+ return a descriptive error message instead.
8590 """
8691 @ spec message ( t ) :: String . t ( )
8792 def message ( % module { __exception__: true } = exception ) do
@@ -153,7 +158,7 @@ defmodule Exception do
153158 end
154159
155160 @ doc """
156- Normalizes and formats throw /errors/exits and stacktraces.
161+ Normalizes and formats throws /errors/exits and stacktraces.
157162
158163 It relies on `format_banner/3` and `format_stacktrace/1`
159164 to generate the final format.
@@ -193,14 +198,18 @@ defmodule Exception do
193198 end
194199
195200 @ doc """
196- Attaches information to exceptions for extra debugging.
201+ Attaches information to throws/errors/exits for extra debugging.
197202
198203 This operation is potentially expensive, as it reads data
199204 from the file system, parses beam files, evaluates code and
200205 so on.
201206
202- If the exception module implements the optional `c:blame/2`
203- callback, it will be invoked to perform the computation.
207+ If `kind` argument is `:error` and the `error` is an Erlang exception, this function will
208+ normalize it. If the `error` argument is an Elixir exception, this function will invoke
209+ the optional `c:blame/2` callback on the exception module if it is implemented.
210+ Unlike `message/1`, this function will not rescue errors - if the callback raises an exception,
211+ the error will propagate to the caller. It is your choice if you want to rescue and return
212+ the original exception, return a different exception, or let it cascade.
204213 """
205214 @ doc since: "1.5.0"
206215 @ spec blame ( :error , any , stacktrace ) :: { t , stacktrace }
0 commit comments