**
TCL错误与异常处理
**
相关命令
catch command ?returnVar? ?optionsVar?
将command作为TCL脚本处理,返回标志该命令完成状态的整形值,命令完成返回0,命令异常返回1;
指定returnVar,该变量被设置为command的返回值或产生的错误信息;
指定optionsVar,该变量设置为返回的选项字典
error messgae ?info? ?code?
产生一个错误,以message作为错误消息。
给定info,而且不是空字符串,那么将用于初始化errorInfo变量
给定code,他将存放至errorCode变量中
return ?option value ...? ?result?
使当前过程返回一个异常状态
interp bgerror path ?cmdPrefix?
将cmdPrefix注册为由path指定的解释器的后台错误处理器
错误生成方式
TCL错误可能由实现TCL解释器的C代码或内建命令生成
也可以由TCL命令error生成
错误及异常处理
1>由TCL脚本生成错误,应该只在需要放弃正在运行的脚本时才使用error命令
if {($x < 0) || ($x > 100)} {
error "x is out of range ($x)";
}
2>用catch捕获异常,当异常被捕获后可以继续运行某个脚本
示例:
#a.对“文件是否可以打开”进行异常捕获
if {[catch {open $fp} fid]} {
puts stderr "ERROR! $fid\n Please try again!";
return; #返回上一级
#exit 1; #结束脚本
}
#其中,fid设置为错误消息。
#如果脚本正常运行,open正常返回,catch返回值为0,而fid的内容是open的返回值,即打开的文件通道描述
#b.对“使用tdom库读取文件名为fp的文件并赋值给xmlfd”的脚本进行异常捕获
if {[catch {set xmlfd [tDOM::xmlReadFile $fp]} fid]} {
puts stderr "ERROR! $fid\n Please try again!";
return;
#exit 1;
}
#c.对“判断该结点是否含有“name”属性”的脚本进行异常捕获,等价于“判断该结点是否存在”
if {[catch {$finded_node hasAttribute "name"} fid]} {
puts stderr "ERROR! The finded_node not exist!\n";
return;
}