Error thrown by calling
failwith cannot be caught, the call is compiled to Michelson's
Therefore, if the error does not need to carry information, you can
simply use the type
None means that an error
occurred. If you need more information on the kind of error, you can
either add variants to the correct values if their type is a sum type,
or define your own type result like in OCaml:
An exception (pun not intended) to this is that when using the test framework, some functions are able to detect a
failwith raised by one of their callbacks, and return a different result based on the success or failure.
For example, the Test.transfer function catches errors raised with
failwith and converts them to a result of type
type test_exec_result = Success of nat | Fail of test_exec_error.
This allows the programmer to write positive and negative test, checking that the contract runs as intended and fails as intended.