Когда ваша программа обнаруживает отказ, который помешает ей завершаться как ожидалось или сгенерирует ошибочные результаты, необходимо остановить дальнейшее выполнение и сообщить об ошибке путем выдачи исключения. Основные шаги, чтобы взять:
Обнаружьте ошибку. Это часто делается с некоторым типом условного оператора, такого как оператор 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. msgID = 'MYFUN:BadIndex'; msg = 'Unable to index into array.'; baseException = MException(msgID,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)) msgID = 'MYFUN:incorrectSize'; msg = 'Indexing array is too large.'; causeException2 = MException(msgID,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.