Выдача исключения

Когда ваша программа обнаруживает отказ, который помешает ей завершаться как ожидалось или сгенерирует ошибочные результаты, необходимо остановить дальнейшее выполнение и сообщить об ошибке путем выдачи исключения. Основные шаги, чтобы взять:

  1. Обнаружьте ошибку. Это часто делается с некоторым типом условного оператора, такого как if или try/catch оператор, который проверяет выход текущей операции.

  2. Создайте MException объект представлять ошибку. Добавьте ошибочный идентификатор и сообщение об ошибке к объекту при вызове конструктора.

  3. Если существуют другие исключения, которые, возможно, способствовали текущей ошибке, можно сохранить MException объект для каждого в cause поле одного MException то, что вы намереваетесь выдать. Используйте addCause функция для этого.

  4. Если существует фиксация, которая может быть предложена для текущей ошибки, можно добавить его в Correction поле MException то, что вы намереваетесь выдать. Используйте addCorrection функция для этого.

  5. Используйте 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.