如果 script 引发一个错误,catch 将返回一个非零的整数值,相应于异常返回代码中的一个(参见 tcl.h 来找到代码值的定义)。如果给出了 varName 参数,则它所指名的变量被设置成从解释 script 得到的错误消息。
如果 script 不引发任何错误,catch 将返回 0(TCL_OK)并设置这个变量为脚本返回的值。
注意 catch 捕获所有的例外,如同错误一样,包括了由 break 和 continue 生成的例外。唯一不捕获的错误是在编译脚本时发现的语法错误。这是因为 catch 命令只捕捉运行时的错误。当 catch 语句被编译后,脚本同样要被编译,并且任何错误都将生成一个 Tcl 错误。
if { [catch {open $someFile w} fid] } { puts stderr "Could not open $someFile for writing\n$fid" exit 1 }catch 命令不捕捉编译后的语法错误。第一次调用 proc foo 时,(过程)体将被编译并且生成一个 Tcl 错误。
proc foo {} { catch {expr {1 +- }} }
Copyright © 1993-1994 The Regents of the University of California. Copyright © 1994-1996 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.