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

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

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

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

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

  4. Используйте throw, или функция throwAsCaller, чтобы иметь MATLAB выпускают исключение. На данном этапе MATLAB хранит информацию стека вызовов в поле stack MException, выходит из в настоящее время рабочей функции и возвращает управление или в клавиатуру или блок выгоды включения в функции вызова.

Этот пример иллюстрирует бросок исключения с помощью шагов, просто описанных:

Создайте массив и индекс в него с логическим массивом.

A = [13 42; 7 20];
idx = [1 0 1; 0 1 0];

Создайте исключение, которое предоставляет общую информацию об ошибке. Протестируйте индексный массив и добавьте исключения с более подробной информацией об источнике отказа.

% 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.
    try
        assert(islogical(idx),'MYFUN:notLogical',...
            'Indexing array is not logical.')
    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
    
    % 4) Throw the exception to stop execution and display an error
    % message.
    throw(baseException)
end
Unable to index into array.

Caused by:
    Indexing array is not logical.
    Indexing array is too large.
Была ли эта тема полезной?