Tcl异常处理命令之catch
catch
catch script ?resultVarName? ?optionsVarName?
catch可以防⽌错误中⽌命令解释。如果脚本script引发错误,catch命令返回与执⾏script返回的异常返回代码对应的⾮零整数值。Tcl将脚本执⾏的正常返回代码定义为0或TCL_OK。此外还定义了四个异常的返回代码:
返回代码说明
1(TCL_ERROR)表⽰脚本执⾏过程中的错误。
2(TCL_RETURN)由return命令返回。
3(TCL_BREAK)由break命令返回。
4(TCL_CONTINUE)由continue命令返回。
Tcl库还可以定义返回其他整数值做为返回代码的新命令。script中使⽤return命令的-code选项还可以返
回Tcl定义的5个返回代码之外的返回代码。
如果提供了resultVarName,则脚本的执⾏结果保存到名为resultVarName的变量中。如果返回代码是1,则其中保存的是错误信息。当返回代码是0时,保存的是脚本的返回值。
如果提供了optionsVarName,则脚本执⾏返回的返回选项字典保存到名为optionsVarName的变量中。字典中始终包含两个条⽬:-code和-level。当脚本的返回代码不是TCL_RETURN时,-level的值为0,-code的值与返回代码相同。只有当返回代码为
TCL_RETURN时,-level和-code的值才会是其他值。当脚本的返回代码为TCL_ERROR时,在optionsVarName中存储的返回选项字典中定义了另外三个条⽬:-errorinfo、-errorcode和-errorline。errorinfo的值是⼀个格式化的堆栈跟踪,包含有关发⽣错误的上下⽂的更多信息。errorcode的值是关于错误的额外信息的列表。errorline的值是发⽣错误的脚本⾏数。errorcode与errorinfo的值同时被保存到全局变量中。
Tcl8.6起,当脚本的返回代码为TCL_ERROR时,optionsVarName中存储的返回选项字典中增加了⼀个条⽬:-errorstack。errorstack的值由在展开堆栈时积累的token-parameter对组成的偶数⼤⼩的列表。
if { [catch { expr 1/0 } msg opts] } {
puts $msg
foreach {k v } $opts {
puts "$k==$v"
}
}

更多推荐

返回,代码,脚本,错误,命令,字典,选项,堆栈