Exception 代表当 Magick++ 报告错误时抛出的对象的基类。Magick++ 在发生错误的操作与同步时抛出 C++ 异常。这允许在封闭代码(可能是处理单个图像的代码)内捕获错误,同时允许以简单的编码风格编写代码。
应该在任何可以被认为是重要工作体的操作序列周围放置一个 try/catch 块。例如,如果您的程序处理图像列表,而其中一些图像可能存在缺陷,则可以通过在处理一个图像的整个代码序列(包括实例化图像对象)周围放置 try/catch 块来最小化错误检查的开销,同时确保创建的所有对象在处理完该对象后都被安全地销毁(C++ 异常会展开堆栈直到封闭的 try 块,销毁任何创建的对象)。
程序主循环的伪代码可能如下所示
程序中 try/catch 块的期望位置和数量取决于其错误处理必须多么复杂。非常简单的程序可能只使用一个 try/catch 块。
Exception 类派生自 C++ 标准异常类。这意味着它包含一个 C++ 字符串,其中包含有关错误的附加信息(例如显示给用户)。通过 what() 方法获取对该字符串的访问权。例如
catch( Exception & error_ ) { cout << "Caught exception: " << error_.what() << endl; }
Warning 和 Error 类派生自 Exception 类。从 Warning 派生的异常用于表示可能影响结果的完整性或质量的非致命错误(例如,提供给 montage 的一个图像存在缺陷)。在大多数情况下,可以通过立即捕获 Warning 异常、处理它(例如打印诊断信息)并继续执行来忽略它。从 Error 派生的异常用于表示无法产生有效结果的致命错误(例如,尝试读取不存在的文件)。
以下表格显示了具体的派生异常类
警告子类
警告 |
警告描述 |
WarningUndefined |
未指定的警告类型。 |
WarningBlob |
目前未使用 |
WarningCache |
目前未使用 |
WarningCoder |
一些编码器发出的警告。 |
WarningConfigure |
目前未使用 |
WarningCorruptImage |
当确定图像损坏时发出的警告。 |
WarningDelegate |
委托(与外部程序的接口)子系统报告的警告。 |
WarningDraw |
渲染子系统报告的警告。 |
WarningFileOpen |
报告图像文件无法打开时的警告(权限问题、错误的文件类型或不存在)。 |
WarningImage |
目前未使用 |
WarningMissingDelegate |
目前未使用 |
WarningModule |
目前未使用 |
WarningMonitor |
目前未使用 |
WarningOption |
当选项格式错误或超出范围时报告的警告。 |
WarningRegistry |
目前未使用 |
WarningResourceLimit |
当程序资源耗尽(例如内存不足)时报告的警告。 |
WarningStream |
目前未使用 |
WarningType |
目前未使用 |
WarningXServer |
X11 子系统报告的警告。 |
错误子类
错误 |
错误描述 |
ErrorUndefined |
未指定的错误类型。 |
ErrorBlob |
BLOB I/O 子系统报告的错误。 |
ErrorCache |
像素缓存子系统报告的错误。 |
ErrorCoder |
编码器(图像格式支持)报告的错误。 |
ErrorConfigure |
加载配置文件时报告的错误。 |
ErrorCorruptImage |
报告图像文件损坏时的错误。 |
ErrorDelegate |
委托(与外部程序的接口)子系统报告的错误。 |
ErrorDraw |
在图像上绘图时报告的错误。 |
ErrorFileOpen |
报告图像文件无法打开时的错误。 |
ErrorImage |
绘图时报告的错误。 |
ErrorMissingDelegate |
报告需要附加库或程序才能支持所请求操作时的错误。 |
ErrorModule |
模块加载器子系统报告的错误。 |
ErrorMonitor |
目前未使用 |
ErrorOption |
当选项格式错误或超出范围时报告的错误。 |
ErrorRegistry |
图像/BLOB 注册子系统报告的错误。 |
ErrorResourceLimit |
当程序资源耗尽(例如内存不足)时报告的错误。 |
ErrorStream |
像素流子系统报告的错误。 |
ErrorType |
类型(字体)渲染子系统报告的错误。 |
ErrorXServer |
X11 子系统报告的错误。 |