从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 的参数。