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 块。

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

try 和 catch 块都可包含嵌套的 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 的调用本身会导致错误。如果使用 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. 
Matlab使用try catch查找语句捕获错误

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

共计2人评分,平均4

到目前为止还没有投票~

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

让我们改善这篇文章!

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

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

如若转载,请注明出处:https://iymark.com/program/matlab-function-catch-try.html

发表评论

登录后才能评论
本站APP
本站APP
分享本页
返回顶部