2013-07-26 70 views
13

MATLAB提供了信令了毛病兩種機制:在error功能和語言的異常處理機制MException + try/catch/throw異常與錯誤在Matlab

看起來它們在很大程度上是等效的: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,查看是否是周圍的其他瑣碎的包裝!)

回答

7

這兩個案件實際上等於(如果您捕獲錯誤或異常,唯一的區別是'cause'屬性的單元格分配略有不同)。 error函數可以很容易地生成和拋出異常。 MException的一個好處是您可以創建MException對象並將其作爲變量傳遞,在需要時更改其屬性(例如,adding a cause)和throwrethrow。但大多數時候你只想使用error

This page來自MathWorks包含大量關於MException類的詳細信息。

+0

有道理 - 即使MException類文檔的URL也告訴「capture-information-about-errors.html」。我不認爲你看到任何地方的鏈接暗示他們實際上是相同的? –

1

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

答案說錯誤要老得多,MException更新更靈活。錯誤已被修改以創建MException。

錯誤被認爲更容易使用,並針對科學和工程界的MATLAB最終用戶。 MException更先進(ME對象可以被修改和重新生成),並且針對軟件開發社區。

+0

該線程中的關鍵點是「錯誤」被修改爲基本上創建並拋出一個「MException」對象。「這真的應該在MException和error()的文檔中。 –

+0

其實,我認爲那個線程是由一個現在被刪除的回答來啓動的!感謝您找到它。 –