今天,再给大家分享一个Matlab
中查找各种报错原因的方法,即通过Matlab
中自带的try catch
语句来查找m文件中出现的错误。本文,主要介绍try catch
的常见用法、语法说明、补充错误消息、将错误重新打包为警告、处理不同类型的错误等。当然,本文只是介绍下该函数的使用方法。当你碰到具体问题时,还是需要自己编写try catch
语句的。
下面,我们首先给出Matlab
中关于try catch
语句的帮助文档如下:
>> help try
try Begin try block.
The general form of a try statement is:
try
statement, ..., statement,
CATCH ME
statement, ..., statement
END
Normally, only the statements between the try and CATCH are executed.
However, if an error occurs while executing any of the statements, the
error is captured into an object, ME, of class MException, and the
statements between the CATCH and END are executed. If an error occurs
within the CATCH statements, execution stops, unless caught by another
try...CATCH block. The ME argument is optional.
常见用法
try
<code>statements</code>
catch <code>exception</code>
<code>statements</code>
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];
输出如下错误信息:
错误使用 vertcat
串联的矩阵的维度不一致。
出错 ppplot (line 6)
C = [A; B];
使用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
输出如下结果:
错误使用 vertcat
串联的矩阵的维度不一致。
出错 ppplot (line 7)
C = [A; B];
原因:
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
输出如下错误结果:
警告: 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
输出如下错误结果:
警告: Function is undefined. Assigning a value of NaN.
其实,看了这些例子,你应该明白try
表示尝试,catch
表示捕获错误,如果捕获到对应错误,则输出相应结果。
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/2362.html