MException

Получите информацию об ошибке

Описание

Любой код MATLAB®, который обнаруживает ошибку и выдает исключение, создает MException объект. MException объект содержит восстановимую информацию об ошибках. MATLAB может выдать или предопределенные исключения или исключения, которые вы создаете.

Создание

Описание

пример

ME = MException(errID,msgtext) информация о получениях об определенной ошибке и хранилищах это в MException объект ME. MException объект создается с ошибочным идентификатором errID и сообщение об ошибке msgtext.

пример

ME = MException(errID,msgtext,A1,...,An) позволяет форматировать сообщения об ошибке с помощью текста или числовых значений A1,...,An заменять спецификаторы преобразования в msgtext во время выполнения.

Входные параметры

развернуть все

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

Ошибочный идентификатор включает одно или несколько полей компонента и мнемоническое поле. Поля должны быть разделены двоеточием. Например, ошибочный идентификатор с полем component компонента и мнемоническое поле mnemonic задан как 'component:mnemonic'.

  • Поле компонента обычно задает продукт или функциональность, под которой могут быть сгенерированы различные ошибки. Например, ошибочный идентификатор 'MATLAB:TooManyInputs' имеет поле MATLAB компонента, что означает, что исключение выдается в MATLAB. Можно снова использовать тот же мнемонический TooManyInputs пока вы предшествуете ему с различными компонентами. Например, если вы хотите выдать исключение в своем тулбоксе каждый раз, когда функция вызвана со слишком многими входными параметрами, можно использовать 'MyToolbox:TooManyInputs'.

  • Мнемоническое поле ошибочного идентификатора обычно является тегом, характерным для ошибочной проблемы. Например, при создании отчетов об ошибке, следующей из использования неоднозначного синтаксиса в MATLAB, можно задать ошибочный идентификатор как 'MATLAB:ambiguousSyntax'.

И мнемонические поля компонента должны каждый начаться с буквы. Оставшиеся символы могут быть буквенно-цифровым индикатором (A–Z, a–z, 0–9) и символы нижнего подчеркивания. Никакие пробельные символы не могут появиться в errID.

Пример: 'MyComponent:noSuchVariable'

Пример: 'Simulink:Signals:InvalidNumberOfPorts'

Информация о причине ошибки и как вы можете откорректировать его в виде вектора символов или строкового скаляра. Чтобы отформатировать текст, используйте escape-последовательности, такие как \t или \n. Также можно использовать любые спецификаторы формата, поддержанные sprintf функция, такая как %s или %d. Задайте значения для спецификаторов преобразования с помощью A1,...,An входные параметры.

Пример: 'Error opening file.'

Пример: 'Error on line %d.'

Значения, которые заменяют спецификаторы преобразования в msgtext, каждый заданный как вектор символов, строковый скаляр или числовой скаляр.

Свойства

развернуть все

Это свойство доступно только для чтения.

Вектор символов, который однозначно определяет ошибку в виде вектора символов errID входной параметр.

Пример: 'MATLAB:test'

Это свойство доступно только для чтения.

Вектор символов, который содержит сообщение об ошибке, которое отображено, когда MATLAB выдает исключение, заданное msgtext и A1,...,An входные параметры.

Пример: 'Variable x not found'

Это свойство доступно только для чтения.

Массив структур, который содержит информацию трассировки стека включая имя файла (file), имя функции (name), и номер строки (line) где MATLAB выдает исключение. Если ошибка происходит в вызванной функции, stack свойство также содержит имя файла, имя функции и номер строки для каждой из вызванных функций. MATLAB генерирует стек только, когда это выдает исключение.

stack N-by-1 struct массив, где N представляет глубину стека вызовов.

Это свойство доступно только для чтения.

Массив ячеек MException объекты, которые заставили MATLAB создавать исключение. Используйте addCause метод, чтобы добавить исключение в cause свойство.

Это свойство доступно только для чтения.

Предложенное исправление для исключения в виде matlab.lang.correction.AppendArgumentsCorrection, matlab.lang.correction.ConvertToFunctionNotationCorrection, или matlab.lang.correction.ReplaceIdentifierCorrection объект. Когда исключение выдано и не отловлено, MATLAB использует Correction свойство предложить фиксацию для исключения.

Функции объекта

throwВыдача исключения
MException.lastВозвратите последнее неперехваченное исключение
rethrowПовторно выдайте ранее перехваченную исключительную ситуацию
throwAsCallerВыдайте исключение, как будто происходит в рамках вызывания функции
addCauseЗапишите дополнительные причины исключения
addCorrectionОбеспечьте предложенное исправление для исключения
getReportПолучите сообщение об ошибке для исключения

Примеры

свернуть все

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

errID = 'myComponent:inputError';
msgtext = 'Input does not have the expected format.';

ME = MException(errID,msgtext)
ME = 
  MException with properties:

    identifier: 'myComponent:inputError'
       message: 'Input does not have the expected format.'
         cause: {}
         stack: [0x1 struct]
    Correction: []

Используйте обоих msgtext и A1,...,An входные параметры, чтобы создать сообщение об ошибке.

errID = 'MATLAB:test';
msgtext = 'There are %d errors on this page';
A1 = 10;

ME = MException(errID,msgtext,A1)
ME = 
  MException with properties:

    identifier: 'MATLAB:test'
       message: 'There are 10 errors on this page'
         cause: {}
         stack: [0x1 struct]
    Correction: []

Выдайте исключение, если имя входной переменной не существует в рабочей области.

str = input('Type a variable name: ','s');
if ~exist(str,'var')
    ME = MException('MyComponent:noSuchVariable', ...
        'Variable %s not found',str);
    throw(ME)
end

Во входной подсказке введите любую переменную, которая не существует в вашей рабочей области. Например, введите notaVariable.

Variable notaVariable not found

Начиная с notVariable не существует в вашей рабочей области, MATLAB создает и выдает MException объект.

Используйте try, catch получить доступ к информации, полученной в MException объект.

Создайте файл myfile.m это содержит вызов surf функция без входных параметров. (Этот вызов функции приводит к исключению и предназначается в иллюстративных целях.) Отлавливают исключение, что MATLAB добавляет MException объект ME, и отобразите сообщение об ошибке путем доступа к message свойство ME.

try
    surf
catch ME
    disp('Error Message:')
    disp(ME.message)
end
Error Message:
Not enough input arguments.

Извлеките ошибочный идентификатор.

ME.identifier
ans =

    'MATLAB:narginchk:notEnoughInputs'

Запросите содержимое stack свойство. В этом примере стек вызовов представлен как 2 1 массив структур.

for i = 1:numel(ME.stack)
    ME.stack(i)
end
ans = 

  struct with fields:

    file: 'matlabroot\toolbox\matlab\graph3d\surf.m'
    name: 'surf'
    line: 49


ans = 

  struct with fields:

    file: 'c:\myMATLABfiles\myfile.m'
    name: 'myfile'
    line: 2

Первый элемент stack отображает имя файла (surf.m), имя функции (surf), и номер строки (49) где исключение произошло. Второй элемент stack показывает имя и номер строки, где исключение произошло в скрипте вызывающей стороны.

Отловите исключение, сгенерированное путем вызывания несуществующей функции, notaFunction. Если функция не задана, выдайте предупреждение и присвойте выход значение 0.

try
    a = notaFunction(5,6);
catch ME
    if strcmp(ME.identifier,'MATLAB:UndefinedFunction')
        warning('Function is undefined.  Assigning a value of 0.');
    else
        rethrow(ME)
    end
end
Warning: Function is undefined.  Assigning a value of 0. 

Отдельно, вызов notaFunction результаты по ошибке. Используя try и catch, этот код отлавливает неопределенное функциональное исключение и повторно группирует его как предупреждение, позволяя MATLAB продолжить выполнять последующие команды. Если перехваченная исключительная ситуация имеет различный ошибочный идентификатор, MATLAB повторно выдает исключение.

Представленный в R2007b