Matlab中try,catch语句
⽬录
执⾏语句并捕获产⽣的错误。
⼀.语法
try
statements
catch exception
statements
end
提⽰
不能在⼀个try块中使⽤多个catch块,但可以嵌套完整的try/catch块。
与⼀些其他语⾔不同,MATLAB不允许在try/catch语句中使⽤finally块。
⼆.说明
try statements, catch statements end执⾏try块中的语句并在catch块中捕获产⽣的错误。此⽅法允许改写⼀组程序语句的默认错误⾏为。如果try块中的任何语句⽣成错误,程序控制将⽴即转⾄包含错误处理语句的catch块。
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 显⽰有关维度的详细信息。
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 由于任何其他原因⽽引发错误,将重新引发该异常。
a = notaFunction(5,6);
catch ME
switch ME.identifier
case 'MATLAB:UndefinedFunction'
warning('Function is undefined. Assigning a value of NaN.');
try catch的使用方法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.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论