名称
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错误代码的列表可以在‘Extension Package Programmer‘s Manual‘的附录中找到。 算子throw的用户定义的Exception元组的第一个元素应该是一个错误代码> = 30000,可以加入其他的元组元素,没有任何限制。
如果在算子在HDevelop或HDevEngine中发生错误,Exception元组将提供以下关于错误的附加信息:
HALCON错误消息。
附加的HDevelop特定错误代码,用于指定在HALCON算子(代码= 21000)内还是在算子外部(例如,在评估和分配参数表达式期间)捕获到错误。 在后一种情况下,错误代码更精确地指定了错误的类型。
一个确切的特定HDevelop错误消息。
发生错误的程序行号。
抛出异常的算子名称(如果在受保护的程序中抛出异常,则返回‘ - protected - ‘而不是算子名称)。
调用堆栈的深度(如果错误发生在“main”,则返回深度1)。
在大多数情况下,对于自动异常处理,使用HALCON错误代码就足够了。 其他数据主要是为了向HDevelop程序的开发者提供一些关于错误情况的信息,以便于调试。 注意:在一般情况下,在导出的代码中有关错误位置的信息将不可用。
注意
算子try,catch,endtry和throw不支持C语言导出,支持语言C ++,C#和VisualBasic / .NET。 只有后者支持跨程序抛出异常。
参数
Exception (output_control) exception-array → (integer / string)
返回异常数据的元组。
结果
catch总是返回2(H_MSG_TRUE)。
可能的后文
dev_get_exception_data
See also
try, endtry, throw, dev_get_exception_data, dev_set_check
模块
Foundation
HDevelop例程
try_catch.hdev Demonstrate the usage of the exception handling in HDevelop
set_shape_model_timeout.hdev Demonstrate how to use the timeout mechanism for shape-based matching
cancel_draw_result.hdev Enable user-defined actions when a draw operation is canceled