.
.
名稱
catch - 執行指令碼並捕獲錯誤
文法
catch script ?resultVarName? ?optionsVarName?
描述
catch命令用來防止出現錯誤而導致指令碼執行終止,catch命令可以調用Tcl解譯器去執行指令碼,並且能夠正常返回。
如果指令碼產生一個錯誤,catch將返回一個非0的整數,如果沒有捕獲到錯誤就返回0或TCL_OK,Tcl還定義了四種異常代碼:1(TCL_ERROR)、2(TCL_RETURN)、3(TCL_BREAK)和4(TCL_CONTINUE)。當執行指令碼產生錯誤時就返回TCL_ERROR,其它的異常由return、break和continue命令產生。
如果給出了resultVarName變元,當返回1時,儲存在resultVarName中的為錯誤資訊,如果返回0,儲存在resultVarName中的為指令碼運行結果。
如果給出了optionsVarName變元,變數裡麵包含有-code和-level兩個條目,如果傳回碼不是TCL_RETURN時,-level為0,-code為返回的異常代碼,當傳回碼為TCL_RETURN時,-level和-code為其它的值,詳細解釋見return命令。
當返回TCL_ERROR時,三個額外的條目將會添加到optionsVarName中:-errorinfo、-errorcode和-errorline,-errorinfo條目是產生錯誤的資訊,-errorcode條目是關於錯誤的一些額外資訊,儲存為列表方式,-errorline指出了錯誤發生的位置。-errorinfo和-errorcode條目都是最近發生的錯誤並且可以使用::errorInfo和::errorCode。
樣本
catch命令可以在if命令中使用。
if { [catch {open $someFile w} fid] } {
puts stderr "Could not open $someFile for writing/n$fid"
exit 1
}
在return命令中有更多的關於catch的樣本。