exponenta event banner

попробовать, поймать

Выполнение инструкций и поиск результирующих ошибок

Синтаксис

try
   statements
catch exception
   statements
end

Описание

пример

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

exception является MException объект, позволяющий идентифицировать ошибку. 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