Подтвердить что ты не робот

Исключения против ошибок в 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, чтобы убедиться, что это тривиальная оболочка вокруг другого!)

4b9b3361

Ответ 1

Эти два случая практически эквивалентны (если вы поймаете ошибку или исключение, единственная разница в том, что ячейка свойства 'cause' выделена несколько иначе). Функция error просто упрощает создание и генерирование исключений. Одна хорошая вещь о MException заключается в том, что вы можете создать объект MException и передать его в качестве переменной, изменить его свойства (например, добавление причины) и throw или rethrow при необходимости. В большинстве случаев вы просто хотите использовать error.

Эта страница из MathWorks содержит множество подробностей о классе MException.

Ответ 2

Есть более полезная информация о этот поток на MATLAB Answers.

В ответ говорится, что ошибка намного старше и что MException является более новым и более гибким. Ошибка была изменена для создания MException.

Ошибка считается более простой в использовании и нацеленной на конечных пользователей MATLAB из научного и инженерного сообщества. MException более совершенен (в том, что объекты ME могут быть модифицированы и восстановлены) и нацелен на сообщество разработчиков программного обеспечения.