Класс 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. Для получения дополнительной информации см. текст Форматирования.

Пример: 'Ошибка вводный файл'.

Пример: 'Ошибка на строке %d'.

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

Свойства

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

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

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

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

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

Массив ячеек MException возражает, что заставленный MATLAB создает это исключение. Используйте метод addCause, чтобы добавить исключение к полю cause другого исключения. Для получения дополнительной информации смотрите Массив Причины.

Методы

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

Примеры

свернуть все

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]

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]

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

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

Была ли эта тема полезной?