名称
catch - 执行脚本并捕获错误
语法
catch script ?resultVarName? ?optionsVarName?
描述
catch命令用来防止出现错误而导致脚本执行终止,catch命令可以调用Tcl解释器去执行脚本,并且能够正常返回。
如果脚本产生一个错误,catch将返回一个非0的整数,如果没有捕获到错误就返回0或TCL_OK,Tcl还定义了四种异常代码:1(TCL_ERROR)、2(TCL_RETURN)、3(TCL_BREAK)和4(TCL_CONTINUE)。当执行脚本产生错误时就返回TCL_ERROR,其它的异常由return、break和continue命令产生。
如果给出了resultVarName变元,当返回1时,存储在resultVarName中的为错误信息,如果返回0,存储在resultVarName中的为脚本运行结果。
如果给出了optionsVarName变元,变量里面包含有-code和-level两个条目,如果返回代码不是TCL_RETURN时,-level为0,-code为返回的异常代码,当返回代码为TCL_RETURN时,-level和-code为其它的值,详细解释见return命令。
当返回TCL_ERROR时,三个额外的条目将会添加到optionsVarName中:-errorinfo、-errorcode和-errorline,-errorinfo条目是产生错误的信息,-errorcode条目是关于错误的一些额外信息,存储为列表方式,-errorline指出了错误发生的位置。-errorinfo和-errorcode条目都是最近发生的错误并且可以使用::errorInfo和::errorCode。
示例
catch命令可以在if命令中使用。
if { [catch {open $someFile w} fid] } {
puts stderr "Could not open $someFile for writing/n$fid"
exit 1
}
在return命令中有更多的关于catch的示例。