MException

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

Описание

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

Создание

Описание

пример

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

пример

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

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

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

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

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

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

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

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

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

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

Свойства

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

Вектор символов, который однозначно определяет ошибку, заданную как вектор символов msgID входной параметр. Это свойство доступно только для чтения. Для получения дополнительной информации смотрите Идентификаторы сообщений.

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

Типы данных: char

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

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

Типы данных: char

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

stack struct N-1 массив, где N представляет глубину стека вызовов. Это свойство доступно только для чтения. Для получения дополнительной информации смотрите Стек вызовов.

Типы данных: struct

Массив ячеек 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Получите сообщение об ошибке для исключения

Примеры

свернуть все

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

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

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

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

ME = MException(msgID,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 объект, и затем выдает его.

Отловите исключение, сгенерированное путем вызывания несуществующей функции, 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