機能説明
スクリプト行を実行して処理例外をトラップします。
スクリプト実行時の処理例外とは、スクリプトの処理がそこで打ち切られ、プロセス自体が強制終了されるエラーです。このようなエラーが発生する例として、実行中のスクリプトに文法エラーや値未設定の変数に対する変数置換のほかに、ファイルオープン時のエラー(openコマンド)や、実行プロセスの終了コードが0以外(execコマンド)など、実行時の条件によって発生するものがあります。
catchコマンドはこのような処理例外の発生時に、独自のリカバリ処理を行い、スクリプトのプロセスが終了するのを防ぐために使用します。
記述形式
catch {script} 【varname】 |
オプション
実行するスクリプトコマンド部分です。改行またはセミコロンで区切ることにより複数のコマンドが記述できます。
処理例外が発生した場合にその原因を示すエラーテキストを格納する変数名です。省略時は、エラーテキストは格納されません。
復帰値
0: | 処理例外は発生しませんでした。 |
0以外: | 処理例外が発生しました。 |
この場合、グローバル変数errorCodeに、詳細情報として以下の値が格納されます。
スクリプトコマンドexecで実行したコマンドの終了コードが“0”以外で終了した場合
CHILDSTATUS pid exitcode |
【Windows版】
ここに入る数字は意味を持ちません。
【UNIX版】
実行したコマンドのプロセスID
実行したコマンドの終了コード
スクリプトコマンドexecで実行したコマンドがシグナルにより強制終了された場合
CHILDKILLED pid sigName msg |
【Windows版】
ここに入る数字は意味を持ちません。
【UNIX版】
実行したコマンドのプロセスID
実行したコマンドに送られたシグナル名
詳細メッセージ
スクリプトコマンドexecで実行したコマンドがシグナルにより一時停止された場合
CHILDSUSP pid sigName msg |
【Windows版】
ここに入る数字は意味を持ちません。
【UNIX版】
実行したコマンドのプロセスID
プロセスに送られたシグナル名
詳細メッセージ
スクリプトコマンドexprで算術エラーが発生した場合
ARITH errName msg |
エラー内容
詳細メッセージ
システムコールでエラーが起きた場合
POSIX errName msg |
エラー内容
詳細メッセージ
エラーとともに返されるメッセージ以外の情報がない場合
NONE |
使用例
ファイルを読み込み用にオープンし、失敗した場合は標準入力からの読み込みをする。
if {[catch { set file [open data.txt r] }]} { set file "stdin" } gets $file buf if {$file != "stdin"} { close $file }
実行結果/出力形式
なし