catch — 捕获在前面的 try 块中抛出的异常。
catch( : : : Exception)
借助 try、catch、endtry 和 throw 算子,可在 HDevelop 中实现动态异常处理,其功能与 C++ 和 C# 中的异常处理机制相当。HDevelop 异常处理的基本概念已在 try、throw 和
dev_set_check 算子说明以及 “HDevelop 用户指南” 中进行阐述。
算子 catch 结束一段被监视的程序代码块,并启动一段在错误情况下必须执行的程序代码块。若 try-catch 代码块在未发生异常时被执行,则 catch-endtry 代码块将被忽略,程序执行将在对应的 endtry 算子之后继续。相反,在错误情况下,程序执行将直接从发生错误的算子(或 throw 算子)跳转至周围 try-catch 代码块的 catch 算子。输出控制参数 Exception 在算子出错时返回包含预定义数据的元组,用于描述错误详情。若异常由 throw 算子抛出,则可返回任意用户自定义元组。
Exception 元组中最关键的数据是错误代码。因此,该代码作为 Exception 元组的首项传递,可通过 'Exception'[0] 直接访问。但其余所有数据必须通过
dev_get_exception_data 算子获取,因为提供的数据顺序和范围可能在未来版本中变更,且不同编程语言导出时可能存在差异。尤其需要注意的是,在导出代码中,错误元组的部分项不可用,另一些项(如错误消息)可能需在请求时才能确定。
若异常由算子错误、HALCON 错误代码(< 10000)引发,或中止的算子属于扩展包,则返回用户自定义错误代码(> 10000)作为错误代码。所有 HALCON 错误代码列表详见“扩展包程序员手册”附录。由算子 throw 抛出的用户自定义 Exception 元组的首个元素应为 ≥30000 的错误代码。其余元组元素可自由选择,不受任何限制。
如果在 HDevelop 或 HDevEngine 中发生算子错误,则由
Exception 元组提供以下错误信息:
HALCON 错误代码。
一个额外的 HDevelop 特定错误代码,用于指定错误是在 HALCON 算子内部捕获的(代码=21000),还是在算子外部捕获的,例如在参数表达式的评估和赋值过程中。在后一种情况下,该错误代码会更精确地说明错误类型。
HALCON 错误消息。
一条适用于 HDevelop 的特定错误信息。
程序中发生错误的行号。
抛出异常的算子名称(如果异常是在受保护函数内抛出的,则返回“--protected--”而非算子名称)。
调用栈的深度(如果错误发生在“main”中,则返回深度为 1)。
发生错误的程序名称。
在大多数情况下,使用 HALCON 错误代码即可实现自动异常处理。附加数据主要用于向 HDevelop 程序开发者提供有关错误状态的信息,以供调试之用。注意:在导出的代码中,通常无法获取错误位置的相关信息。
C 语言不支持导出 try、catch、endtry 和 throw 算子,仅C++、C# 和 VisualBasic/.NET 语言支持。其中仅后者支持跨函数抛出异常。
Exception (输出控制) exception-array → (integer / string)
返回异常数据的元组。
catch 始终返回 2 ( H_MSG_TRUE )。
try,
endtry,
throw,
dev_get_exception_data,
dev_set_check
基础