本文主要是介绍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等属性)进行赋值。
- a = [1,2,3];
- b = [2,3];
- try
- c = [a; b]; %有错误(列的维度不一致),跳转到catch语句行并执行
- disp(c); %发现错误后,该行代码不执行
- catch ErrorInfo %捕获到的错误是一个MException对象
- disp(ErrorInfo);
- disp(ErrorInfo.identifier);
- disp(ErrorInfo.message);
- disp(ErrorInfo.stack);
- disp(ErrorInfo.cause);
- %发生错误时的其他动作
- end
形式2
直接生成一个MException对象ME,并手动对ME对象中的属性进行初始化赋值。
MException类对象的初始化格式为:
MException(MSGID, ERRMSG, V1, V2, …, VN),其中MSGID为identifier,ERRMSG为message,其中ERRMSG可以为包含%s、%d等格式控制字符串,而V1、V2…VN则为格式控制串对应的值。
- inputstr = input(‘Type a variable name:’, ‘s’);
- if ~exist(inputstr, ‘var’)
- ME = MException(‘MyComponent:noSuchVariable’, ‘Variable %s not found’, inputstr);%直接生成一个MException对象,并初始化
- throw(ME);
- 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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!