Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
- La
raisefunción se usa para indicar que se ha producido un error o una condición excepcional. La información sobre el error se captura en un objeto de excepción. - La
reraisefunción se usa para propagar una excepción controlada en la cadena de llamadas.
Sintaxis
raise (expression)
Observaciones
La raise función genera un objeto de excepción e inicia un proceso de desenredado de pila. Common Language Runtime (CLR) administra el proceso de desenredado de la pila, por lo que el comportamiento de este proceso es el mismo que en cualquier otro lenguaje .NET. El proceso de desenredado de pila es una búsqueda de un controlador de excepciones que coincide con la excepción generada. La búsqueda se inicia en la expresión actual try...with , si hay una. Cada patrón del with bloque está activado, en orden. Cuando se encuentra un controlador de excepciones coincidente, la excepción se considera controlada; De lo contrario, la pila se desencadena y with se bloquea la cadena de llamadas se comprueba hasta que se encuentre un controlador coincidente. Los finally bloques que se encuentran en la cadena de llamadas también se ejecutan en secuencia a medida que la pila desenreda.
La raise función es el equivalente de throw en C# o C++.
Los ejemplos de código siguientes muestran el uso de la raise función 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 raise función también se puede usar para generar excepciones de .NET, 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
Reraising an exception
La reraise función se puede usar en un with bloque para propagar una excepción controlada en la cadena de llamadas.
reraise no toma un operando de excepción. Resulta más útil cuando un método pasa un argumento de un llamador a otro método de biblioteca y el método de biblioteca genera una excepción que se debe pasar al autor de la llamada.
Es reraise posible que la función no se use en el with bloque de construcciones de trywith/listas calculadas, matrices, secuencias o expresiones de cálculo, incluidas task { .. } o .async { .. }
open System
let getFirstCharacter(value: string) =
try
value[0]
with :? IndexOutOfRangeException as e ->
reraise()
let s = getFirstCharacter("")
Console.WriteLine($"The first character is {s}")
// The example displays the following output:
// System.IndexOutOfRangeException: Index was outside the bounds of the array.
// at System.String.get_Chars(Int32 index)
// at getFirstCharacter(String value)
// at <StartupCode>.main@()