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的值同时被保存到全局变量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"
    }
}

 

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值