异常的行为
MATLAB在R2007b中的新特性之一是更健壮的管理和报告错误的方法。我们发现使用anMException对象,而不是依赖lasterror,减少了一种编码错误lasterror是一个全局状态,很容易损坏。这可能发生在try / catch你不想在哪里扔错误但是做些别的事情。然而,降落在抓住更新lasterror因此,除非您保存它的状态并在稍后恢复它,否则可能会导致一些意想不到的行为。此外,MException对象允许我们方便地增加错误消息中传递的信息。我们来看看怎么做MException对象的工作。
内容
试着抓住E
可以使用新的语法生成MExceptiontry / catch.如下面的代码所示,可以生成一个MException在代码的catch段中,您可以看到我选择在这里简单地显示消息。
a=[3,2]b=[1;7]试一试C = a + b;抓住myEx disp (myEx.message)结束
a = 3 2 b = 1 7矩阵维数必须一致。
这是它的完整展示MException.
迈克斯
myEx=MeException对象,其属性为:标识符:“MATLAB:dimagree”消息:“矩阵维度必须一致。”堆栈:[4x1 struct]原因:{}
除了消息之外,它还有一个消息标识符、有关调用堆栈的信息和原因(另一个原因,通常是底层原因)MException)。获取这些属性的完整详细信息在这里.
增加原因
为了更详细地解释所发生的事情,你可以加上导致这是另一个MException,致原MException.这里有另一种生成MException.
newME=MException(“罗兰:博客:MExcepExampleAddCause”,...'矢量方向不匹配。');myEx=addCause(myEx,newME)
myEx = MException对象的属性:标识符:'MATLAB:dimagree'消息:'矩阵维度必须一致。' stack: [4x1 struct] cause: {[1x1 MException]}
要查看附加原因,请提取它。
myEx.cause {1}
ans =具有属性:identifier: 'Loren:Blog:MExcepExampleAddCause'的MException对象消息:'矢量方向不匹配。' stack: [0x1 struct] cause: {}
错误呢?
目前调用之间没有区别错误并直接抛出异常,因为错误已经在内部抛出异常。错误基本上实现为:
把(MException (id、味精))
现在直接抛出异常的原因是添加原因。
你能用这个功能吗?
您是否看到自己在某些应用程序中使用此功能?邮递在这里让我知道。
评论
如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。