try, catch

Выполняйте операторы и улавливайте получившиеся ошибки

Синтаксис

try
   statements
catch exception
   statements
end

Описание

пример

try statements, catch statements end выполняет операторы в try блокирует и улавливает результирующие ошибки в catch блок. Этот подход позволяет вам переопределить поведение ошибки по умолчанию для набора программных операторов. Если какой-либо оператор в try блок генерирует ошибку, управление программой немедленно переходит к catch блок, который содержит ваши операторы обработки ошибок.

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

Оба try и catch блоки могут содержать вложенные try/catch операторы.

Примеры

свернуть все

Создайте две матрицы, которые вы не можете объединить вертикально.

A = rand(3);
B = ones(5);

C = [A; B];
Error using vertcat
Dimensions of matrices being concatenated are not consistent.

Использование try/catch для отображения дополнительной информации о размерностях.

try
   C = [A; B];
catch ME
   if (strcmp(ME.identifier,'MATLAB:catenate:dimensionMismatch'))
      msg = ['Dimension mismatch occurred: First argument has ', ...
            num2str(size(A,2)),' columns while second has ', ...
            num2str(size(B,2)),' columns.'];
        causeException = MException('MATLAB:myCode:dimensions',msg);
        ME = addCause(ME,causeException);
   end
   rethrow(ME)
end 
Error using vertcat
Dimensions of matrices being concatenated are not consistent.

Caused by:
    Dimension mismatch occurred: First argument has 3 columns while second has 5 columns.

Если матричные размерности не согласны, MATLAB® отображает дополнительные сведения о несоответствии. Любые другие ошибки появляются как обычно.

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

try
    a = notaFunction(5,6);
catch
    warning('Problem using function.  Assigning a value of 0.');
    a = 0;
end
Warning: Problem using function.  Assigning a value of 0.

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

Использование try/catch для обработки различных типов ошибок различными способами.

  • Если функция notaFunction не определено, выдает предупреждение вместо ошибки и присваивает выходу значение NaN.

  • Если notaFunction.m существует, но является скриптом вместо функции, выдает предупреждение вместо ошибки, запускает скрипт и присваивает выходу значение 0.

  • Если MATLAB выдает ошибку по любой другой причине, повторно выдайте исключение.

try
    a = notaFunction(5,6);
catch ME
    switch ME.identifier
        case 'MATLAB:UndefinedFunction'
            warning('Function is undefined.  Assigning a value of NaN.');
            a = NaN;
        case 'MATLAB:scriptNotAFunction'
            warning(['Attempting to execute script as function. '...
                'Running script and assigning output a value of 0.']);
            notaFunction;
            a = 0;
        otherwise
            rethrow(ME)
    end
end
Warning: Function is undefined.  Assigning a value of NaN. 

Совет

  • Вы не можете использовать несколько catch блоки в try блок, но можно вложить полные try/catch блоки.

  • В отличие от некоторых других языков, MATLAB не допускает использования finally блок внутри try/catch операторы.

Представлено до R2006a