Matlab探寻(四):捕获异常(catch MException)

2024-06-06 21:38

本文主要是介绍Matlab探寻(四):捕获异常(catch MException),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     全文转载自bible_reader博客 【Matlab捕获异常】

  在写Matlab小程序的时候,经常会遇到一些细小的错误或异常。在运行程序时,希望能够捕获这些错误并将其错误信息输出,然后再写发生错误时对应的处理程序。在此总结一下Matlab的错误捕捉并选择性地输出错误信息。

1、MException 捕获异常信息类

Matlab提供了一个MException类来保存执行代码时捕获到的错误信息。当发现错误时,Matlab即生成一个MException类对象,该对象具有以下属性和函数。

属性:

    identifier:为一个字符串,每一个错误对应一个identifier,其至少包含两个用分号“:”隔开的子串,主要形式为COMPONENT:MNEMONIC。

    message:为一个字符串,主要用于向用户反馈错误信息。

    stack:用于保存各个m文件之间调用的栈关系

    cause:造成错误的MExceptions所组成的元包阵列Cell Array。

函数:

    throw():将错误信息在命令窗口command window上输出,并终止程序的执行。

    rethrow():将已经捕获的错误重新在命令窗口command window上输出,并终止程序的执行。

    throwAsCaller():用调用函数的方式将错误信息在命令窗口command window上输出。

    addCause():将两个MException错误信息进行叠加,并返回一个新的MException对象,该对象包含了被叠加的两个MException对象的错误信息。

    getReport():获取错误信息的message属性并返回。

    last():返回最新的一个未被捕获的错误信息。

2、捕获异常的基本形式

形式1

将捕获的错误直接传递到一个MException对象ErrorInfo,让Matlab对ErrorInfo对象的属性(identifier、message等属性)进行赋值。

[plain] view plain copy
print ?
  1. a = [1,2,3];  
  2. b = [2,3];  
  3. try   
  4.     c = [a; b]; %有错误(列的维度不一致),跳转到catch语句行并执行  
  5.     disp(c);    %发现错误后,该行代码不执行  
  6. catch ErrorInfo %捕获到的错误是一个MException对象  
  7.     disp(ErrorInfo);  
  8.     disp(ErrorInfo.identifier);  
  9.     disp(ErrorInfo.message);  
  10.     disp(ErrorInfo.stack);  
  11.     disp(ErrorInfo.cause);  
  12.       
  13.     %发生错误时的其他动作  
  14.   
  15. end  

形式2

直接生成一个MException对象ME,并手动对ME对象中的属性进行初始化赋值。

MException类对象的初始化格式为:

MException(MSGID, ERRMSG, V1, V2, …, VN),其中MSGID为identifier,ERRMSG为message,其中ERRMSG可以为包含%s、%d等格式控制字符串,而V1、V2…VN则为格式控制串对应的值。

[plain] view plain copy
print ?
  1. inputstr = input(‘Type a variable name:’, ‘s’);  
  2. if ~exist(inputstr, ‘var’)  
  3.    ME = MException(‘MyComponent:noSuchVariable’, ‘Variable %s not found’, inputstr);%直接生成一个MException对象,并初始化  
  4.    throw(ME);  
  5. end  

3、函数介绍

3.1 throw()

将错误信息在命令窗口command window上输出,并终止程序的执行。其在命令窗口输出的是错误对象的message属性。


3.2 rethrow()

将已经捕获的错误重新在命令窗口command window上输出,并终止程序的执行。利用该函数可以将上面的ErrorInfo重新抛出一次。注意两者的细微区别。


3.3 throwAsCaller()

用调用函数的方式将错误信息在命令窗口command window上输出。利用该函数采用调用函数的形式将错误信息在命令窗口command window上输出。


3.4 addCause()

将两个MException错误信息进行叠加,并返回一个新的MException对象,该对象包含了被叠加的两个MException对象的错误信息。

如下所示,cause1_ME表示矩阵越界访问错误,cause2_ME表示不存在这样的文件时仍然load的错误。然后通过将这两种错误信息进行叠加,具体效果如下图所示。



3.5 getReport()

获取错误信息的message属性并返回。


3.6 last()

返回最新的一个未被捕获的错误信息。如下所示,ErrorInfo是之前捕获的错误信息,然后重新制造一个matlab错误(越界访问矩阵),并且该错误并没有被matlab捕获到一个MException对象中,因此可以用该函数返回最新的一个未被捕获的错误信息。


这篇关于Matlab探寻(四):捕获异常(catch MException)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037306

相关文章

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

Docker启动异常

报错信息: failed to start daemon: Error initializing network controller: error creating default "bridge" network: cannot create network b8fd8c684f0ba865d4a13d36e5282fd694bbd37b243c7ec6c9cd29416db98d4b (d

MATLAB算法实战应用案例精讲-【数模应用】三因素方差

目录 算法原理 SPSSAU 三因素方差案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解惑 均方平方和类型? 事后多重比较的类型选择说明? 事后多重比较与‘单独进行事后多重比较’结果不一致? 简单效应是指什么? 边际估计均值EMMEANS是什么? 简单简单效应? 关于方差分析时的效应量? SPSSAU-案例 一、案例

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查字符串值合法性 确认字符串格式 优化代码逻辑 增加输入验证和错误处理 总结 博主v:XiaoMing_Java 问题分析 javax.manag

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法(GOOSE Algorithm,GOOSE)从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOOSE algorithm: a powerful optimization tool for real-world engineering

基于NURBS曲线的数据拟合算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1NURBS曲线基础 4.2 数据拟合原理 5.完整程序 1.程序功能描述        基于NURBS曲线的数据拟合算法,非均匀有理B样条(Non-Uniform Rational B-Splines,简称NURBS)曲线是一种强大的数学工具,广泛应用于计算机图形学、CAD/CA

matlab sift算法使用的记录

最近在做个三维建模的东西,用到了sift算子,需要在matlab上使用。网上介绍使用了 David Lowe的源代码。源码地址为: http://www.cs.ubc.ca/~lowe/keypoints/ 在使用的过程中,会出现以下错误: 不知道是为什么,在一片博客中看到图像大小大致要800*600的说明,我就猜想是不是因为我的图像太大了。原始图像3000*1200的,于是我就把图

【从0实现React18】 (三) 初探reconciler 带你初步探寻React的核心逻辑

Reconciler 使React核心逻辑所在的模块,中文名叫协调器,协调(reconciler)就是diff算法的意思 reconciler有什么用? 在前端框架出现之前,通常会使用 jQuery 这样的库来开发页面。jQuery 是一个过程驱动的库,开发者需要直接调用浏览器的宿主环境 API,例如 DOM 操作等。这意味着开发者需要手动管理页面状态和交互,通过执行一系列的操作来更新页面。

详细解析MATLAB和Simulink中的文件格式:mat, mdl, mexw32, 和 m 文件

matlab 探索MATLAB和Simulink中的文件格式:MAT, MDL, MEXW32, 和 M 文件**MAT 文件 (.mat)****MDL 文件 (.mdl)****MEX 文件 (.mexw32/.mexw64)****M 文件 (.m)****总结** 探索MATLAB和Simulink中的文件格式:MAT, MDL, MEXW32, 和 M 文