【问题标题】:Exceptions vs. Errors in MatlabMatlab 中的异常与错误
【发布时间】:2016-09-26 19:32:50
【问题描述】:

Matlab 提供了两种机制来表示出现问题:error函数和语言的异常处理机制MException + try/catch/throw

看起来它们在很大程度上是等效的:error 函数和 MException 函数具有非常相似的语法。通过error() 引发的错误可以被catch 捕获,而与错误相关的工具(如dbstop if errorlasterr)似乎也可以处理异常。

有没有理由更喜欢error('Foo:Bar', 'Some human-readable message about bar') 而不是throw(MException('Foo:Bar', 'Some human-readable message')),反之亦然?

(它们都是内置的,因此您不能只打开(例如)error.m 来查看其中一个是否是另一个简单的包装器!)

【问题讨论】:

    标签: matlab exception exception-handling


    【解决方案1】:

    这两种情况实际上是等价的(如果您发现错误或异常,唯一的区别是'cause' 属性的单元格的分配方式略有不同)。 error 函数使生成和抛出异常变得容易。 MException 的一个好处是您可以创建一个 MException 对象并将其作为变量传递,更改其属性(例如,adding a cause),并在需要时更改throwrethrow。然而,大多数时候你只想使用error

    来自 MathWorks 的This page 包含有关 MException 类的大量详细信息。

    【讨论】:

    • 有道理——甚至 MException 类文档的 URL 都在告诉“capture-information-about-errors.html”。我想您没有在任何地方看到表明它们实际上是等效的链接?
    【解决方案2】:

    MATLAB Answers 上的this thread 有一些更有用的信息。

    答案说错误更老,而 MException 更新且更灵活。已修改错误以创建 MException。

    Error 被认为更易于使用,并且面向科学和工程社区的 MATLAB 最终用户。 MException 更高级(因为 ME 对象可以修改和重新抛出),并且针对软件开发社区。​​p>

    【讨论】:

    • 该线程中的关键点是“'error' 被修改为本质上创建并抛出一个“MException”对象。”,这确实应该在 MException 和 error() 的文档中。
    • 实际上,我认为该线程是由一个现已删除的对这个问题的答案开始的!感谢您找到它。
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 2013-06-23
    • 2010-10-24
    • 2018-06-05
    • 2010-10-29
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多