Compartir a través de


Excepciones: función raise (F#)

La función raise se utiliza para indicar que se ha producido un error o una condición excepcional. La información del error se captura en un objeto de excepción.

raise (expression)

Comentarios

La función raise genera un objeto de excepción e inicia un proceso de "desenredo" de la pila (eliminación en orden inverso de los elementos de la pila). Common Language Runtime (CLR) administra este proceso, por lo que su comportamiento es igual que en cualquier otro lenguaje .NET. El proceso de "desenredo" de la pila es la búsqueda de un controlador de excepciones que corresponda a la excepción generada. La búsqueda se inicia en la expresión try...with actual, si la hubiera. Se comprueban por orden todos los modelos del bloque with. Cuando se encuentra el controlador de excepciones correspondiente, la excepción se considera controlada; de lo contrario, se eliminan en orden inverso los elementos de la pila y se comprueban los bloques with en la cadena de llamadas hasta que se encuentre el controlador correspondiente. Los bloques finally que se encuentren en la cadena de llamadas también se ejecutan por orden a medida que se desenreda la pila.

La función raise equivale a throw en C# o C++. Utilice reraise en un controlador de tipo catch para propagar la misma excepción por la cadena de llamadas.

En los ejemplos de código siguientes, se muestra el uso de la función raise para generar una excepción.

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

La función raise también se puede utilizar para generar excepciones de .NET, tal y como se muestra en el ejemplo siguiente.

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

Vea también

Referencia

Tipos de excepción (F#)

Excepciones: la expresión try...with (F#)

Excepciones: la expresión try...finally (F#)

Excepciones: función failwith (F#)

Excepciones: función invalidArg (F#)

Otros recursos

Control de excepciones (F#)