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
Excepciones: la expresión try...with (F#)
Excepciones: la expresión try...finally (F#)
Excepciones: función failwith (F#)
Excepciones: función invalidArg (F#)