Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
- La
raise
fonction est utilisée pour indiquer qu’une erreur ou une condition exceptionnelle s’est produite. Des informations sur l’erreur sont capturées dans un objet d’exception. - La
reraise
fonction est utilisée pour propager une exception gérée vers le haut de la chaîne d’appels.
Syntaxe
raise (expression)
Remarques
La raise
fonction génère un objet d’exception et lance un processus de déroulement de pile. Le processus de déroulement de la pile est géré par le Common Language Runtime (CLR), de sorte que le comportement de ce processus est le même que dans n’importe quel autre langage .NET. Le processus de déroulement de la pile est une recherche d’un gestionnaire d’exceptions qui correspond à l’exception générée. La recherche commence dans l’expression actuelle try...with
, s’il en existe un. Chaque modèle du bloc est vérifié, dans l’ordre with
. Lorsqu’un gestionnaire d’exceptions correspondant est trouvé, l’exception est considérée comme gérée ; sinon, la pile est déwound et with
bloque la chaîne d’appels jusqu’à ce qu’un gestionnaire correspondant soit trouvé. Tous les finally
blocs rencontrés dans la chaîne d’appels sont également exécutés en séquence en tant que déroulement de la pile.
La raise
fonction est l’équivalent de throw
C# ou C++.
Les exemples de code suivants illustrent l’utilisation de la raise
fonction pour générer une exception.
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
fonction peut également être utilisée pour déclencher des exceptions .NET, comme illustré dans l’exemple suivant.
let divide x y =
if (y = 0) then raise (System.ArgumentException("Divisor cannot be zero!"))
else
x / y
Réévaluation d’une exception
La reraise
fonction peut être utilisée dans un with
bloc pour propager une exception gérée vers le haut de la chaîne d’appels.
reraise
ne prend pas d’opérande d’exception. Il est plus utile lorsqu’une méthode transmet un argument d’un appelant à une autre méthode de bibliothèque et que la méthode de bibliothèque déclenche une exception qui doit être transmise à l’appelant.
La reraise
fonction peut ne pas être utilisée sur le with
bloc de try
with
/constructions dans des listes calculées, des tableaux, des séquences ou des expressions de calcul, y compris task { .. }
ou .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@()