主要内容

try, catch

R2026b

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

语法

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. 

提示

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

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

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

全部展开