Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
- La
raisefonction 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
reraisefonction 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 trywith/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@()