罗兰关于MATLAB的艺术

将想法转化为MATLAB

异常的行为

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、味精))

现在直接抛出异常的原因是添加原因。

你能用这个功能吗?

您是否看到自己在某些应用程序中使用此功能?邮递在这里让我知道。




MATLAB®7.5发布

|

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。