Исключения против ошибок в Matlab
Matlab предоставляет два механизма сигнализации о том, что что-то пошло не так: функция error
и механизмы обработки исключений языка MException
+ try
/catch
/throw
.
Похоже, что они в значительной степени эквивалентны: функция error
и функция MException
имеют очень похожий синтаксис. Ошибки, возникающие с помощью error()
, могут быть обнаружены с помощью catch
, в то время как инструменты, связанные с ошибкой (например, dbstop if error
и lasterr
), похоже, работают и с исключениями.
Есть ли причина предпочесть error('Foo:Bar', 'Some human-readable message about bar')
на throw(MException('Foo:Bar', 'Some human-readable message'))
или наоборот?
(Они оба встроены, поэтому вы не можете просто открыть (например,) error.m, чтобы убедиться, что это тривиальная оболочка вокруг другого!)
Ответы
Ответ 1
Эти два случая практически эквивалентны (если вы поймаете ошибку или исключение, единственная разница в том, что ячейка свойства 'cause'
выделена несколько иначе). Функция error
просто упрощает создание и генерирование исключений. Одна хорошая вещь о MException
заключается в том, что вы можете создать объект MException и передать его в качестве переменной, изменить его свойства (например, добавление причины) и throw
или rethrow
при необходимости. В большинстве случаев вы просто хотите использовать error
.
Эта страница из MathWorks содержит множество подробностей о классе MException.
Ответ 2
Есть более полезная информация о этот поток на MATLAB Answers.
В ответ говорится, что ошибка намного старше и что MException является более новым и более гибким. Ошибка была изменена для создания MException.
Ошибка считается более простой в использовании и нацеленной на конечных пользователей MATLAB из научного и инженерного сообщества. MException более совершенен (в том, что объекты ME могут быть модифицированы и восстановлены) и нацелен на сообщество разработчиков программного обеспечения.