MException

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

Описание

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

Создание

Синтаксис

ME = MException(msgID,msgtext)
ME = MException(msgID,msgtext,A1,...,An)

Описание

пример

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 выдает исключение, заданное входными параметрами A1,...,An и msgtext. Это свойство доступно только для чтения. Для получения дополнительной информации см. текст сообщения об ошибке.

Пример: '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 использует свойство 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

Для просмотра документации необходимо авторизоваться на сайте