Exceptions vs. Errors in Matlab
exception, matlab
Solution
Those two cases are virtually equivalent (if you catch an error or exception the only difference is that the `'cause'` property's cell is allocated slightly differently). The `error` function just makes it easy to generate and throw exceptions. The one nice thing about `MException` is that you can create an MException object and pass it around as a variable, change its properties (e.g., adding a cause), and `throw` or `rethrow` when needed. Most of the time you'll just want to use `error` however.
This page from the MathWorks includes lots of details on the MException class.
Problem
Matlab provides two mechanisms for signaling that something has gone wrong: the `error`function and the language's exception-handling mechanisms `MException` + `try`/`catch`/`throw`. It looks like they are largely equivalent: The `error` function and the `MException` function have very similar syntax. Errors raised via `error()` can be caught by a `catch`, while the error-related tools (like `dbstop if error` and `lasterr`) seem to work with exceptions too. Is there ever a reason to prefer `error('Foo:Bar', 'Some human-readable message about bar')` to `throw(MException('Foo:Bar', 'Some human-readable message'))` or vice versa? (They're both built-ins, so you cannot just open (e.g.) error.m to see if one is a trivial wrapper around the other!)