Imatest IT 異常層次結構

從Imatest IT 4.2 版本開始,引入了異常層級結構,旨在為 API 使用者提供更完善的錯誤處理方法。本頁面旨在作為Imatest 可能拋出的異常及其在Imatest IT/DLL中處理方式的參考。

異常層次結構

下表顯示了 Imatest 定義的異常層次結構。表中,縮排越深表示該異常繼承自其上方縮排越淺的異常。請注意, Imatest IT函式庫也可能會拋出由底層 MATLAB 程式產生的例外。 Imatest IT提供了區分Imatest 異常和 MATLAB 異常所需的功能。

我們的函式庫拋出的所有例外都是mwException類別的實例,mwException 是一個 MATLAB 類,它繼承自std::exception 。

異常名稱

筆記

ImatestException

Imatest 所有異常的基底類別。

配置異常

處理與 Imatest 無效配置相關的錯誤的例外情況,例如提供的 INI 檔案包含無效條目。

數據異常

這是針對 Imatest 資料物件出現問題而要拋出的例外。

資料構造異常

這是當 Imatest 資料物件的建構子出現問題時要拋出的異常。

影像分析異常

但因使用者提供的圖片來源問題導致的錯誤除外。

自動檢測異常

與自動檢測演算法相關的錯誤除外。

作物異常

因影像裁切不當造成的一般性錯誤除外。

檢測異常

此例外情況適用於 Imatest 特徵檢測演算法中發生的錯誤。

RoiFailureException

如果 ROI 出現問題,例如偵測到的邊緣太靠近 ROI 的兩端,則會出現錯誤,但這種情況除外。

ImageSourceException

但因使用者提供的圖片來源問題導致的錯誤除外。

錯誤框架異常

但也有例外情況,例如影像中的測試圖表沒有與相機正確對齊,或者換句話說,沒有正確構圖。

影像擷取異常

影像擷取介面(例如 Android 或 Omnivision API 函數)所造成的錯誤例外情況。

影像異常

影像檔案(而非視訊檔案)特有的錯誤除外。

BadImageSizeException

但當影像尺寸太小而無法進行分析時,則不適用此例外情況。

EmptyImageException

但也有例外情況,即本應有一個圖像數組可供分析,但卻檢測到了一個空的圖像數組。

不支援的格式異常

當提供不支援的圖像或視訊格式時,會出現例外情況。

視訊異常

視訊檔案相關的常見錯誤除外。

ImatestIOException

I/O 一般問題的例外。

ImatestCannotOpenFileException

當 Imatest 無法開啟檔案時,即因找不到檔案以外的其他原因而無法取得讀取或寫入權限時,則會出現例外情況。

ImatestFileNotFoundException

當找不到指定檔案時,會拋出一個異常。

ImatestSocketException

套接字通訊出錯時拋出的異常。

LicenseException

與呼叫第三方授權庫或系統相關的外部錯誤除外,例如,呼叫 Nalpeiron 函式庫傳回錯誤代碼。

輸出異常

但對於提供給使用者的輸出相關的錯誤,例如圖表或文字輸出中的錯誤,則不予受理。

JsonException

讀取或寫入 JSON 檔案時出錯的異常。

繪圖異常

Imatest 向使用者輸出的圖表中出現錯誤時,會進行例外處理。

XmlException

讀取或寫入 XML 檔案時出錯的異常。

參數異常

函數參數相關錯誤除外。

輸入錯誤異常

當向函數提供的輸入數量不正確時,會拋出異常。

輸出數量錯誤異常

當傳遞給函數的輸出數量不正確時,會發生異常。

輸入格式異常

例外情況是輸入參數格式不正確(長度錯誤等)所導致的錯誤。

輸入類型錯誤異常

輸入參數類型或類別錯誤導致的錯誤除外。

UIException

使用者介面相關的常規錯誤除外。

用戶取消例外

當使用者點擊取消按鈕時可能拋出的異常。

函數原型和其他庫資源

由於mwException類別沒有用於指示異常的成員,因此Imatest IT庫中包含了一個函數,用於檢索上次拋出的異常的標識符。 getExceptionID() 函數應該在 catch 程式碼區塊中呼叫(請參閱下面的範例)。

getExceptionID (int nargout , mwArray& errID, mwArray& errName )呼叫此函數以檢索最後一個異常的標識符和名稱。

errID參數是一個 mwArray 類型,它是 MATLAB 陣列類,包含一個有符號整數,用於識別異常。 errName 包含一個字串,表示異常的名稱。輸入參數nargout 的值應為 2。

Imatest IT庫中包含一個額外的頭檔( imatest_exception_IDs.h ),其中包含Imatest異常層次結構的枚舉和 const char* 識別碼聲明。 imatest_exception_IDs.h 中定義的值與getExceptionID ()傳回的值相對應。

例如:如何確定異常類型

為了區分 Imatest 異常和 Matlab 異常,您需要使用`getExceptionID` 函數來取得異常識別碼。 Imatest 異常的完整識別碼清單定義在Imatest IT隨附的`imatest_exception_IDs.h`頭檔中。以下範例展示如何取得異常標識符:

try {

   // call an Imatest library function ...

} catch(mwException& mwe) {
   std::cout << "Error!" << std::endl;
   std::cout << mwe.what() << std::endl;
   mwe.print_stack_trace(); // print the stack trace to std::cerr

   mwArray errName, errID; 
   getExceptionID(2, errID, errName); 
   std::string exceptName((const char*)errName.ToString());
   int exceptID = errID.Get(1,1);
   // Handle exceptions using definitions in imatest_exception_IDs.h...

} catch(const std::exception& ex) {
   // Handle exceptions ...
}

相關 INI 文件設置

Imatest INI 檔案的[api]部分新增了continue_on_error鍵。 continue_on_error 可用來抑制在Imatest IT中批次處理影像時可能出現的異常。當 continue_on_error設定為 1 時,將抑制異常;當設定為 0 時,允許拋出異常。更多資訊請參閱:影響 Imatest IT 的參數。