Das Exception Behaviour definiert, wie errors ausgelöst und angezeigt werden.
Es enthält zwei optionale Callbacks:
message/1 wandelt das Fehler-Struct in eine lesbare Nachricht um.exception/1 erzeugt die Nachricht aus dem zweiten Argument von raise/2, wodurch die Nachricht angepasst werden kann.Definierte Fehler:
:message.raise/1 und raise/2 verwendet werden, um den beabsichtigten Fehler auszulösenUm eine Ausnahme aus einem Fehlermodul zu definieren, verwendest du das Makro defexception:
# Defines a minimal error, with the name `MyError`
defmodule MyError do
defexception message: "error"
end
# Defines an error with a customized exception/1 function
defmodule MyCustomizedError do
defexception message: "custom error"
@impl true
def exception(value) do
case value do
[] ->
%MyCustomizedError{}
_ ->
%MyCustomizedError{message: "Alert: " <> value}
end
end
end
Definierte Fehler können wie ein eingebauter Fehler verwendet werden, und zwar mit raise/1 oder raise/2:
raise MyError
# => ** (MyError) error
raise MyError, "an error occurred"
# => ** (MyError) an error occurred
raise MyCustomizedError
# => ** (MyCustomizedError) "custom error"
raise MyCustomizedError, "a very bad error occurred"
# => ** (MyCustomizedError) Alert: a very bad error occurred