Partager via


Exceptions : fonction raise (F#)

La fonction raise est utilisée pour indiquer qu'une erreur ou une condition exceptionnelle s'est produite. Les informations sur l'erreur sont capturées dans un objet exception.

raise (expression)

Notes

La fonction raise génère un objet exception et démarre un processus de déroulement de pile. Celui-ci étant géré par le common language runtime (CLR), le comportement de ce processus est le même que dans tout autre langage .NET. Le processus de déroulement de pile recherche un gestionnaire d'exceptions qui correspond à l'exception générée. La recherche débute dans l'expression try...with actuelle, s'il y en a une. Chaque modèle dans le bloc with est examiné, dans l'ordre. Lorsqu'un gestionnaire d'exceptions correspondant est trouvé, l'exception est considérée comme gérée ; sinon, la pile est déroulée et les blocs with jusqu'en haut de la chaîne d'appels sont examinés jusqu'à ce qu'un gestionnaire correspondant soit trouvé. Tous les blocs finally qui sont rencontrés dans la chaîne d'appels sont également exécutés dans l'ordre à mesure que la pile se déroule.

La fonction raise équivaut à throw en C# ou C++. Utilisez reraise dans un gestionnaire catch pour propager la même exception jusqu'en haut de la chaîne d'appels.

Les exemples de code suivants illustrent l'utilisation de la fonction raise pour lever 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 fonction raise peut également être utilisée pour lever des exceptions .NET, comme indiqué dans l'exemple suivant.

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

Voir aussi

Référence

Types d'exceptions (F#)

Exceptions : expression try...with (F#)

Exceptions : expression try...finally (F#)

Exceptions : fonction failwith (F#)

Exceptions : fonction invalidArg (F#)

Autres ressources

Gestion des exceptions (F#)