Condividi tramite


Eccezioni: funzione raise (F#)

La funzione raise viene utilizzata per indicare che si è verificato un errore o una condizione insolita.Le informazioni sull'errore vengono acquisite in un oggetto eccezione.

raise (expression)

Note

La funzione raise genera un oggetto eccezione e avvia un processo di rimozione dello stack.Il processo di rimozione dello stack viene gestito da Common Language Runtime (CLR), pertanto il comportamento di questo processo è analogo a quello in qualsiasi atro linguaggio .NET.Il processo di rimozione dello stack è una ricerca di un gestore eccezioni corrispondente all'eccezione generata.La ricerca inizia nell'espressione try...with corrente, se presente.Ogni modello nel blocco with viene controllato, in ordine.Quando viene trovato un gestore eccezioni corrispondente, l'eccezione viene considerata gestita. In caso contrario, lo stack viene rimosso e i blocchi with nella catena di chiamate vengono controllati fino a quando non viene trovato un gestore corrispondente.Qualsiasi blocco finally individuato nella catena di chiamate viene inoltre eseguito in sequenza man mano che lo stack viene rimosso.

La funzione raise è equivalente a throw in C# o C++.Utilizzare reraise in un gestore catch per propagare la stessa eccezione sulla catena di chiamate.

Negli esempi di codice seguenti viene illustrato l'utilizzo della funzione raise per generare un'eccezione.

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 funzione raise può anche essere utilizzata per generare eccezioni .NET, come illustrato nell'esempio seguente.

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

Vedere anche

Riferimenti

Tipi di eccezione (F#)

Eccezioni: espressione try...with (F#)

Eccezioni: espressione try...finally (F#)

Eccezioni: funzione failwith (F#)

Eccezioni: funzione invalidArg (F#)

Altre risorse

Gestione delle eccezioni (F#)