Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

On Error Goto

エラー処理ルーチンを使用可能にし、プロシージャ内でルーチンの位置を指定します。

Synopsis

On Error GoTo [ label | 0 ]

引数

On Error GoTo 文で使用する引数は、以下のとおりです。

label Goto 操作のターゲットを表す行ラベル。ラベルは、後にコロン接尾語が続く有効な識別子です。詳細は、"Caché Basic の使用法" の "Labels" を参照してください。

概要

label 引数で指定した行で開始するエラー処理ルーチンを使用可能にします。実行時エラーが発生した場合、制御は指定された行に分岐して、エラー・ハンドラを有効にします。指定した行は On Error 文と同じプロシージャ内になければならず、そうでなければ、コンパイル時エラーが発生します。

label 引数は、現在のプログラム中の既存のラベルを指定します。ラベルのコロン接尾語は省略できます。ラベル名では、大文字と小文字が区別されます。存在しないラベル名を指定すると、実行時エラーが発生します。

以前にエラー処理を有効にした場合、On Error Goto 0 を使用して無効にしてください。

On Error Goto がエラーによってトリガされた場合は、自動的に無効にされます。したがって、2 度目のエラーが発生すると、無限ループが開始されるのではなく、プログラムの処理が中止されます。

エラー処理ルーチンは Sub プロシージャや、Function プロシージャではありません。行ラベルでマークされたコード・セクションです。

エラー処理ルーチンは Err オブジェクトの Number プロパティ値によって、エラーの原因を確認します。ルーチンは、他のエラーが発生する前もしくはエラーの原因となり得るプロシージャが呼び出される前に、関連したプロパティ値を Err オブジェクトで検証または保存します。Err オブジェクトのプロパティ値は最も最近のエラーのみを反映します。Err.Number に関連したエラー・メッセージは、Err.Description に含まれます。

以下の例は On Error Goto 文の使用法を示しています。ここでは、6 を 0 で除算しようとするエラーが生じています。ErrMod エラー・ハンドラは、エラー番号 (18) と説明を表示します。

Mod1:
  On Error Goto ErrMod
  PrintLn "Mod1 pre-div"
  Println "result: ",6/0
  Println "Mod1 post-div"
  Goto Done
ErrMod:
  Println "Handling an error!"
  PrintLn "Error ",Err.Number," ",Err.Description
Done:
  Println "All done"

次の例では、ErrMod エラー・ハンドラは、divisor を 1 に変更することによって 0 による除算の問題を修正し、Mod1 の演算を再試行します。ErrMod エラー処理モジュールを起動することにより、On Error Goto がリセットされ、このプログラムで 2 度目のエラー (5 を 0 で除算) が発生したときに、ErrMod を再び呼び出すのではなくプログラムが中止されることに注意してください。

Setup:
  On Error Goto ErrMod
  divisor=0
Mod1:
  PrintLn "Mod1 pre-div"
  Println "result: ",6/divisor
  Println "Mod1 post-div"
  Println 5/0
  Goto Done
ErrMod:
  Println "Handling an error!"
  PrintLn "Error ",Err.Number," ",Err.Description
  If Err.Number=18 Then
     divisor=1
     Goto Mod1
  Else
     Println Err.Number
  End If
Done:
  Println "All done"

以下の例は、ユーザ定義関数での On Error GoTo 文の使用法を示しています。

PrintLn ErrorTest(1)
PrintLn ErrorTest(0)
 
Function ErrorTest(Arg)
  On Error Goto ErrDisplay
  return 1/Arg
ErrDisplay:
  PrintLn "Error ", Err.Number, " ", Err.Description, " ", Err.Source
  Err.Clear
  Return 0
End Function

関連項目

  • Goto

  • Err オブジェクト

  • "Caché Basic の使用法" の “言語構造” の章の "Labels"

FeedbackOpens in a new tab