异常:raise 函数 (F#)

raise 函数用于指示发生了错误或异常情况。 可以在异常对象中捕获有关错误的信息。

raise (expression)

备注

raise 函数可生成异常对象并启动堆栈展开过程。 堆栈展开过程由公共语言运行时 (CLR) 进行管理,因此,此过程的行为与在任何其他 .NET 语言中的行为相同。 堆栈展开过程是一个搜索与已生成的异常匹配的异常处理程序的过程。 搜索从当前的 try...with 表达式(如果存在)开始。 将按顺序检查 with 块中的每种模式。 如果找到匹配的异常处理程序,则认为异常会得到处理;否则,将展开堆栈,并向上检查调用链中的 with 块,直至找到匹配的处理程序。 在调用链中遇到的任何 finally 块同样会按堆栈展开的序列执行。

raise 函数与 C# 或 C++ 中的 throw 等效。 在捕获处理程序中使用 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#)