目录
执行语句并捕获产生的错误。
一.语法
try
statements
catch exception
statements
end
提示
-
不能在一个try块中使用多个catch块,但可以嵌套完整的try/catch块。
-
与一些其他语言不同,MATLAB不允许在try/catch语句中使用finally块。
二.说明
try
执行try块中的语句并在catch块中捕获产生的错误。此方法允许改写一组程序语句的默认错误行为。如果try块中的任何语句生成错误,程序控制将立即转至包含错误处理语句的catch块。statements
, catchstatements
end
exception
是MException
对象,可以用它来标识错误。catch块将当前异常对象分配给exception
中的变量。
try和catch块都可包含嵌套的
try/catch
语句。
三.示例
1.补充错误消息
创建两个无法垂直串联的矩阵。
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® 将显示有关不匹配的更多信息。而所有其他错误也都将正常显示。
2.将错误重新打包为警告
捕获通过调用不存在的函数 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 就可以继续执行后续命令。
3.处理不同类型的错误
使用 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.