## Tcl8.6.17/Tk8.6.17 Documentation > Tcl Commands > try

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

### NAME

try — 不都合と例外を捕捉し処理する 　 Trap and process errors and exceptions

### 構文 SYNOPSIS

try body ?handler...? ?finally script?

### 説明 DESCRIPTION

この命令は記述譜の本体を実行し､その記述譜の出力がどのようなものか(通常終了､不都合､又は他の何かの例外結果)に依拠して､その結果に従って課程処理記述譜を実行する｡一度それが生じると､もし finally 句が存在する場合､それを含むその記述譜は実行されその処理機能(又は処理機能が合致しない場合はその本体)の結果は､繁殖し続けることが許容される｡註意すべきは､ finally 句は不都合が生じても､もしどれかの処理機能が使用されていると､それに関係なく､遂行される｡ This command executes the script body and, depending on what the outcome of that script is (normal exit, error, or some other exceptional result), runs a handler script to deal with the case. Once that has all happened, if the finally clause is present, the script it includes will be run and the result of the handler (or the body if no handler matched) is allowed to continue to propagate. Note that the finally clause is processed even if an error occurs and irrespective of which, if any, handler is used.

処理機能句はそれぞれ幾つかの語として表現され､次のうちの一つの形式を取らねばならない: The handler clauses are each expressed as several words, and must have one of the following forms:

on code variableList script
  もし本体の評価が例外符号 code を伴って完了した場合この句が合致する｡この code は整数あるいは次の文字列: ok か error か return か break か continue の語の内の一つとして表示されうる｡後者の文字列はそれぞれ整数の 0 から 4 に相当する｡ 　　 This clause matches if the evaluation of body completed with the exception code code. The code may be expressed as an integer or one of the following literal words: ok, error, return, break, or continue. Those literals correspond to the integers 0 through 4 respectively.

trap pattern variableList script
  もし本体の評価が不都合の結果になり､且つ解釈実行機能の状態の辞書による -errorcode の前置辞が pattern に等しい場合この句が合致する｡ -errorcode から取った前置辞の語の数は pattern のリスト長さに等しく､且つ､語の間の空白は比較する前に､符号と pattern の両方に正規化される｡ 　　　 This clause matches if the evaluation of body resulted in an error and the prefix of the -errorcode from the interpreter's status dictionary is equal to the pattern. The number of prefix words taken from the -errorcode is equal to the list-length of pattern, and inter-word spaces are normalized in both the -errorcode and pattern before comparison.

それぞれの処理機能の variableList の語は常に変数の名前のリストとして解釈される｡もし､リストの第１語が存在し且つ非空である場合､その名前は本体(主なる try からの)の評価結果がその中に置かれる変数である; それはどの不都合についても可読にした形式を含んでいる｡もしリストの第２語が存在し且つ非空である場合は､本体の実行の完了の瞬間に解釈実行機能の任意辞書を置いた変数の名前である｡ The variableList word in each handler is always interpreted as a list of variable names. If the first word of the list is present and non-empty, it names a variable into which the result of the evaluation of body (from the main try) will be placed; this will contain the human-readable form of any errors. If the second word of the list is present and non-empty, it names a variable into which the options dictionary of the interpreter at the moment of completion of execution of body will be placed.

それぞれの処理機能の script の語は又､常に同じに解釈される: もし句が合致する場合は､評価すべき Tcl 記述譜として｡もし script が文字 “-” であり且つ､処理機能が最後のものでない場合､それに続く handler の script が代りに起動される(丁度 switch [切替]命令の如く)｡ 　 The script word of each handler is also always interpreted the same: as a Tcl script to evaluate if the clause is matched. If script is a literal “-” and the handler is not the last one, the script of the following handler is invoked instead (just like with the switch command).

註意すべきは､ handler の句はその順に合致する､そこで､最初に合致したものが常に選択される｡多くの場合一つの handler の句が選択される｡その結果､ on error はそれに続く try 中の trap のどれをも遮蔽する｡更なる註意として on error は trap {} と等価である｡ 　　　　 Note that handler clauses are matched against in order, and that the first matching one is always selected. At most one handler clause will selected. As a consequence, an on error will mask any subsequent trap in the try. Also note that on error is equivalent to trap {}.

もし handler か finally の句かのどれかの処理の間に例外(即ち､何かの非-ok 結果)が生じると､元の例外の状態の辞書は新しい例外状態の辞書の -during 鍵の元に追加される｡ If an exception (i.e. any non-ok result) occurs during the evaluation of either the handler or the finally clause, the original exception's status dictionary will be added to the new exception's status dictionary under the -during key.

### 用例 EXAMPLES

何がおこっても確実にファイルが閉じられるようにする: 　　 Ensure that a file is closed no matter what:

    set f [open /some/file/name a]
    try {
        puts $f "some message"
        # ...
    } finally {
        close $f
    }

ファイルについて､読み込み操作ができない様々な理由を扱う： 　 Handle different reasons for a file to not be openable for reading:

    try {
        set f [open /some/file/name r]
    } trap {POSIX EISDIR} {} {
        puts "failed to open /some/file/name: it's a directory"
    } trap {POSIX ENOENT} {} {
        puts "failed to open /some/file/name: it doesn't exist"
    }

### SEE ALSO

catch, error, return, throw

### KEYWORDS

cleanup, error, exception, final, resource management
Copyright © 2008 Donal K. Fellows