Freigeben über


Ausnahmen: Die raise-Funktion (F#)

Mit der raise-Funktion wird angegeben, dass eine Fehler- oder Ausnahmebedingung aufgetreten ist. Informationen über den Fehler werden in einem Ausnahmeobjekt aufgezeichnet.

raise (expression)

Hinweise

Die raise-Funktion generiert ein Ausnahmeobjekt und initiiert eine Stapelentladung. Das Entladen des Stapels wird von der Common Language Runtime (CLR) verwaltet, deshalb erfolgt dieser Vorgang wie in allen anderen .NET-Sprachen. Bei der Stapelentladung handelt es sich um die Suche nach einem Ausnahmehandler, der der generierten Ausnahme entspricht. Die Suche beginnt im aktuellen try...with-Ausdruck, sofern vorhanden. Die einzelnen Muster im with-Block werden nacheinander überprüft. Wenn ein entsprechender Ausnahmehandler gefunden wird, gilt die Ausnahme als behandelt. Andernfalls wird der Stapel entladen, und with-Blöcke in der Aufrufkette werden überprüft, bis ein entsprechender Handler gefunden wird. Beim Entladen des Stapels werden in der Aufrufkette ggf. auftretende finally-Blöcke ebenfalls nacheinander ausgeführt.

Die raise-Funktion ist die Entsprechung von throw in C# oder C++. Verwenden Sie reraise in einem catch-Handler, um die gleiche Ausnahme in der Aufrufkette weiterzugeben.

In den folgenden Codebeispielen wird die Verwendung der raise-Funktion zum Generieren einer Ausnahme veranschaulicht.

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

Mit der raise-Funktion können auch .NET-Ausnahmen ausgelöst werden, wie im folgenden Beispiel gezeigt.

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

Siehe auch

Referenz

Ausnahmetypen (F#)

Ausnahmen: Der try...with-Ausdruck (F#)

Ausnahmen: Der try...finally-Ausdruck (F#)

Ausnahmen: Die failwith-Funktion (F#)

Ausnahmen: Die invalidArg-Funktion (F#)

Weitere Ressourcen

Ausnahmebehandlung (F#)