Когда ваша программа обнаруживает отказ, который помешает ей завершаться как ожидалось или сгенерирует ошибочные результаты, необходимо остановить дальнейшее выполнение и сообщить об ошибке путем выдачи исключения. Основные шаги, чтобы взять:
Обнаружьте ошибку. Это часто делается с некоторым типом условного оператора, такой как if
или try/catch
оператор, который проверяет выход текущей операции.
Создайте MException
объект представлять ошибку. Добавьте ошибочный идентификатор и сообщение об ошибке к объекту при вызове конструктора.
Если существуют другие исключения, которые, возможно, способствовали текущей ошибке, можно сохранить MException
объект для каждого в cause
поле одного MException
то, что вы намереваетесь выдать. Используйте addCause
функция для этого.
Если существует фиксация, которая может быть предложена для текущей ошибки, можно добавить его в Correction
поле MException
то, что вы намереваетесь выдать. Используйте addCorrection
функция для этого.
Используйте throw
или throwAsCaller
функция, чтобы иметь MATLAB® выпустите исключение. На данном этапе MATLAB хранит информацию стека вызовов в stack
поле MException
, выходит из в настоящее время рабочей функции и возвращает управление или в клавиатуру или блок выгоды включения в функции вызова.
Этот пример иллюстрирует бросок исключения с помощью шагов, только описанных.
Создайте функцию, indexIntoArray
, это индексирует в заданный массив с помощью заданного индекса. Функция фиксирует любые ошибки, что MATLAB выдает и создает исключение, которое предоставляет общую информацию об ошибке. Когда это фиксирует ошибку, это обнаруживает, включает ли ошибка количество входных параметров или заданного индекса. Если это делает, функция добавляет дополнительные исключения с более подробной информацией об источнике отказа и предлагает коррекции, если это возможно.
function indexIntoArray(A,idx) % 1) Detect the error. try A(idx) catch % 2) Construct an MException object to represent the error. errID = 'MYFUN:BadIndex'; msg = 'Unable to index into array.'; baseException = MException(errID,msg); % 3) Store any information contributing to the error. if nargin < 2 causeException = MException('MATLAB:notEnoughInputs','Not enough input arguments.'); baseException = addCause(baseException,causeException); % 4) Suggest a correction, if possible. if(nargin > 1) exceptionCorrection = matlab.lang.correction.AppendArgumentsCorrection('1'); baseException = baseException.addCorrection(exceptionCorrection); end throw(baseException); end try assert(isnumeric(idx),'MYFUN:notNumeric', ... 'Indexing array is not numeric.') catch causeException baseException = addCause(baseException,causeException); end if any(size(idx) > size(A)) errID = 'MYFUN:incorrectSize'; msg = 'Indexing array is too large.'; causeException2 = MException(errID,msg); baseException = addCause(baseException,causeException2); end % 5) Throw the exception to stop execution and display an error % message. throw(baseException) end end
Если вы вызываете функцию, не задавая индекс, функция выдает подробную ошибку и предлагает коррекцию:
A = [13 42; 7 20]; indexIntoArray(A)
Error using indexIntoArray (line 21)
Unable to index into array.
Caused by:
Not enough input arguments.
Did you mean:
>> indexIntoArray(A, 1)
Если вы вызываете функцию с нечисловым массивом индекса, который является слишком большим, функция выдает подробную ошибку.
A = [13 42; 7 20]; idx = ['a' 'b' 'c']; indexIntoArray(A, idx)
Error using indexIntoArray (line 41)
Unable to index into array.
Caused by:
Error using indexIntoArray (line 25)
Indexing array is not numeric.
Indexing array is too large.