次の方法で共有


例外: raise 関数 (F#)

raise 関数は、エラーまたは例外条件が発生したことを示すために使用します。 エラーに関する情報は、例外オブジェクトでキャプチャされます。

raise (expression)

解説

raise 関数は例外オブジェクトを生成し、スタック アンワインド プロセスを開始します。 スタック アンワインド プロセスは共通言語ランタイム (CLR: Common Language Runtime) によって管理されるため、他の .NET 言語の場合と同じように動作します。 スタック アンワインド プロセスでは、生成された例外に対応する例外ハンドラーが検索されます。 この検索は、現在の try...with 式で開始されます (存在する場合)。 with ブロックの各パターンが順番にチェックされます。 一致する例外ハンドラーが見つかった場合は、例外が処理されたと見なされます。それ以外の場合は、スタックがアンワインドされ、一致する例外ハンドラーが見つかるまで、呼び出しチェーンの with ブロックがチェックされます。 呼び出しチェーンにある finally ブロックも、スタック アンワインドとして順番に実行されます。

raise 関数は、C# または C++ の throw に相当します。 catch ハンドラーで reraise を使用して、呼び出しチェーンの上位に同じ例外を反映します。

次のコード例は、raise 関数を使用して例外を生成する方法を示しています。

exception InnerError of string
exception OuterError of string

let function1 x y =
   try 
     try 
        if x = y then raise (InnerError("inner"))
        else raise (OuterError("outer"))
     with
      | InnerError(str) -> printfn "Error1 %s" str
   finally
      printfn "Always print this." 


let function2 x y =
  try
     function1 x y
  with
     | OuterError(str) -> printfn "Error2 %s" str

function2 100 100
function2 100 10

raise 関数を使用して、.NET 例外を発生させることもできます。次に例を示します。

let divide x y =
  if (y = 0) then raise (System.ArgumentException("Divisor cannot be zero!"))
  else
     x / y

参照

関連項目

例外の種類 (F#)

例外: try...with 式 (F#)

例外: try...finally 式 (F#)

例外: failwith 関数 (F#)

例外: invalidArg 関数 (F#)

その他の技術情報

例外処理 (F#)