今天,再给大家分享一个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

微信扫一扫
支付宝扫一扫

