Main Content

try, catch

执行语句并捕获产生的错误

语法

try
   statements
catch exception
   statements
end

说明

示例

try statements, catch statements end 执行 try 块中的语句并在 catch 块中捕获产生的错误。此方法允许您改写一组程序语句的默认错误行为。如果 try 块中的任何语句生成错误,程序控制将立即转至包含错误处理语句的 catch 块。

exceptionMException 对象,您可以用它来标识错误。catch 块将当前异常对象分配给 exception 中的变量。

trycatch 块都可包含嵌套的 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 的调用本身会导致错误。如果使用 trycatch,此代码将捕获任何异常并将其重新打包为警告,这样 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. 

提示

  • 您不能在一个 try 块中使用多个 catch 块,但可以嵌套完整的 try/catch 块。

  • 与一些其他语言不同,MATLAB 不允许在 try/catch 语句中使用 finally 块。

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开