Matlab使用try catch查找语句捕获错误

4
(2)

今天,再给大家分享一个Matlab中查找各种报错原因的方法,即通过Matlab中自带的try catch语句来查找m文件中出现的错误。本文,主要介绍try catch的常见用法、语法说明、补充错误消息、将错误重新打包为警告、处理不同类型的错误等。当然,本文只是介绍下该函数的使用方法。当你碰到具体问题时,还是需要自己编写try catch语句的。

Matlab使用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块。

exceptionMException对象,您可以用它来标识错误。catch块将当前异常对象分配给exception中的变量。

trycatch块都可包含嵌套的try/catch语句。

补充错误消息

创建两个无法垂直串联的矩阵。

A = rand(3);
B = ones(5);
C = [A; B];

输出如下错误信息:

错误使用 vertcat
串联的矩阵的维度不一致。
出错 ppplot (line 6)
C = [A; B];
Matlab使用try catch查找语句捕获错误

使用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使用try catch查找语句捕获错误

如果矩阵维度不一致,则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. 
Matlab使用try catch查找语句捕获错误

notaFunction的调用本身会导致错误。如果使用trycatch,此代码将捕获任何异常并将其重新打包为警告,这样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. 
Matlab使用try catch查找语句捕获错误

其实,看了这些例子,你应该明白try表示尝试,catch表示捕获错误,如果捕获到对应错误,则输出相应结果。

共计2人评分,平均4

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/articles/2362.html

(3)
微信公众号
古哥的头像古哥管理团队
上一篇 2021年04月14日 19:39
下一篇 2021年04月16日 21:19

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号