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/program/matlab-function-catch-try.html

(2)
上一篇 2021年04月14日 19:39
下一篇 2021年04月16日 21:19

相关推荐

  • Matlab使用曲线拟合工具箱拟合多项式曲线

    文章目录(展开/隐藏→) 展开加载和绘制数据创建并绘制二次曲线创建并绘制多项式曲线绘制残差以评估拟合检查超出数据范围的拟合绘制预测区间拟合优度检验比较系数和置信限以确定最佳拟合评估…

    2022年08月30日
    183
  • Matlab使用waterfall函数绘制瀑布图

    文章目录(展开/隐藏→) 展开常见用法语法说明创建瀑布图指定颜色图颜色修改图的外观更改帷幕位置 3.5 (4) Matlab中有一个waterfall函数,可以用于绘制瀑布图。瀑布…

    2021年02月19日
    0227
  • Matlab快速入门之索引位置

    文章目录(展开/隐藏→) 展开下标冒号运算符串联删除行和列标量扩展逻辑下标find 函数 4 (1) Matlab中,有一个词,称之为索引。我们可以理解为索引表示某元素在数组或矩阵…

    2022年09月16日
    051
  • Matlab三维散点图绘制函数scatter3

    文章目录(展开/隐藏→) 展开常见用法语法说明创建三维散点图改变标记大小改变标记颜色填充标记设置标记类型设置标记属性指定三维散点图的坐标区使用句柄设置散点序列属性 3.3 (4) …

    2020年11月10日
    0230
  • Matlab使用while来循环执行真值条件语句

    文章目录(展开/隐藏→) 展开常见用法语法说明重复执行语句,直到表达式为 False跳至下一循环迭代在表达式为 false 之前退出循环友情提示 4.3 (3) 前面,我们讲过Ma…

    2021年04月07日
    073
  • Matlab快速入门之调用函数

    4.3 (3) 今天来给各位说下如何在Matlab中调用函数,MATLAB®内置了大量执行计算任务的函数,尤其随着版本的迭代,内置的函数会越来越多。在其他编程语言中,函数等同于子例…

    2022年09月08日
    039

发表回复

登录后才能评论
本站APP