TCL-使用catch捕获错误
(2011-04-02 10:24:10)
标签:
tclcatch杂谈 |
分类: tcl |
错误通常导致所有活动的TCL命令被终止,但是有些情况下,在错误发生后继续执行脚本是有用的。例如,你用unset取消变量x的定义,但执行unset时,x可能不存在。如果你用unset取消不存在的变量,会产生一个错误:
% unset x
can't unset "x": no such variable
此时,你可以用catch命令忽略这个错误:
% catch {unset x}
1
catch的参数是TCL脚本。如果脚本正常完成,catch返回0。如 果脚本中发生错误,catch会俘获错误(这样保证catch本身不被终止掉)然后返回1表示发生了错误。上面的例子忽略unset的任何错误,这样如果 x存在则被取消,即使x以前不存在也对脚本没有任何影响。
catch命令可以有第二个参数。如果提供这个参数,它应该是一个变量名,catch把脚本的返回值或者是出错信息存入这个变量。
�tch {unset x} msg
1
%set msg
can't unset "x": no such variable
在这种情况下,unset命令产生错误,所以msg被设置成包含了出错信息。如果变量x存在,那么unset会成功返回,这样catch的返回值为0,msg存放unset命令的返回值,这里是个空串。如果在命令正常返回时,
你想访问脚本的返回值,这种形式很有用;如果你想在出错时利用错误信息做些什么,如产生log文件,这种形式也很有用。