try — 启动一个程序块,用于检测并捕获异常。
try( : : : )
借助 try、catch、endtry 和 throw 算子,可在 HDevelop 中实现动态异常处理,其功能与 C++ 和 C# 中的异常处理机制相当。通过 try、catch 和 endtry
算子可形成两个代码块:第一个代码块(try .. catch)包含执行常规程序逻辑的受监控程序行。第二个代码块(catch.. endtry)则包含异常发生时执行的代码。
算子 try 语句用于为后续程序语句启用异常处理,即对后续代码块(直至对应的
catch 语句)进行异常监视。若后续程序行执行过程中发生错误或其他异常状态,或通过 throw 算子显式抛出异常,程序将立即退出 try 代码块(或根据用户偏好在显示错误消息框后退出),并在对应的 catch
算子处继续执行。若异常在由
try 块直接或经由其他函数调用进入的函数内部抛出,则该函数调用及调用栈中位于 try 块上方的所有中间函数调用将立即中止(若适用,同样会在显示错误消息框后中止)。
是否在抛出异常前显示错误消息框,由 HDevelop 参数中的
“在 try-catch 程序段内抑制错误对话框弹出”
选项控制,可通过
编辑->参数选择->一般属性->高级用户 路径访问。该消息框还允许在抛出异常前暂停程序执行,以便编辑可能存在错误的算子调用。
用于监视异常的程序块以对应的
catch 算子结束。
若在监视的 try 块内未发生异常,则后续的
catch 块将被忽略,程序执行将在对应的 endtry 算子之后继续。
try-catch-endtry 代码块可在函数内部或跨不同函数调用时任意嵌套,前提是任何内部 try-catch-endtry 代码块必须完全位于外部 try-catch
或 catch-endtry 代码块之内。若在内部 try-catch 块中抛出异常,则该异常处理将由对应的
catch-endtry 块捕获。因此,除非从 catch 块中显式调用 throw 算子重新抛出异常,否则外部 try-catch 块无法感知该异常。
若在 HALCON 算子中发生错误,将创建异常元组并传递给负责捕获该异常的 catch 算子。该元组收集了错误相关信息,如错误代码和错误文本。捕获异常后,可通过 dev_get_exception_data 算子访问这些信息。有关传递的异常数据详情、访问方式及代码导出注意事项,请参阅该算子的说明文档。throw 算子的参考文档则描述了如何抛出用户自定义的异常元组。
HDevelop 提供了禁用 HALCON 错误处理的功能。可通过调用算子
dev_set_check('~give_error') 实现,或在对话框
编辑->参数选择->运行时设置 中取消勾选提示错误 复选框。若关闭错误处理,当发生 HALCON 错误时不会抛出异常,程序执行将正常继续至下一个算子。与此相对,throw 算子将始终抛出异常,且不受 'give_error' 设置影响。参数表达式评估过程中发生的错误同样适用此规则。
C 语言不支持导出 try、catch、endtry 和 throw 算子,仅 C++、C# 和 VisualBasic/.NET 语言支持。其中仅后者支持跨函数抛出异常。
try
read_image (Image, 'may_be_not_available')
catch (Exception)
if (Exception[0] == 5200)
dev_get_exception_data (Exception, 'error_message', ErrMsg)
set_tposition (3600, 24, 12)
write_string (3600, ErrMsg)
return ()
else
* rethrow the exception
throw ([Exception,'unknown exception in myproc'])
endif
endtry
try 始终返回 2 ( H_MSG_TRUE )。
catch,
endtry,
throw,
dev_get_exception_data,
dev_set_check
基础