Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
- Die
raiseFunktion wird verwendet, um anzugeben, dass ein Fehler oder eine außergewöhnliche Bedingung aufgetreten ist. Informationen zum Fehler werden in einem Ausnahmeobjekt erfasst. - Die
reraiseFunktion wird verwendet, um eine behandelte Ausnahme in der Aufrufkette zu verteilen.
Syntax
raise (expression)
Bemerkungen
Die raise Funktion generiert ein Ausnahmeobjekt und initiiert einen Stapel-Abspannvorgang. Der Stapel-Abbruchprozess wird von der Common Language Runtime (CLR) verwaltet, sodass das Verhalten dieses Prozesses identisch ist wie in jeder anderen .NET-Sprache. Der Stapelentspannvorgang ist eine Suche nach einem Ausnahmehandler, der der generierten Ausnahme entspricht. Die Suche beginnt im aktuellen try...with Ausdruck, falls vorhanden. Jedes Muster im with Block wird in der Reihenfolge überprüft. Wenn ein übereinstimmenden Ausnahmehandler gefunden wird, wird die Ausnahme als behandelt betrachtet. andernfalls wird der Stapel entwundt und with blockiert die Aufrufkette, bis ein übereinstimmender Handler gefunden wird. Alle finally Blöcke, die in der Anrufkette auftreten, werden ebenfalls sequenziert ausgeführt, wenn sich der Stapel abwickelt.
Die raise Funktion entspricht throw in C# oder C++.
Die folgenden Codebeispiele veranschaulichen die Verwendung der raise Funktion zum Generieren einer Ausnahme.
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
Die raise Funktion kann auch zum Auslösen von .NET-Ausnahmen verwendet werden, wie im folgenden Beispiel gezeigt.
let divide x y =
if (y = 0) then raise (System.ArgumentException("Divisor cannot be zero!"))
else
x / y
Erneutes Erstellen einer Ausnahme
Die reraise Funktion kann in einem with Block verwendet werden, um eine behandelte Ausnahme in der Aufrufkette zu verteilen.
reraise keine Ausnahmeopernden. Es ist am nützlichsten, wenn eine Methode ein Argument von einem Aufrufer an eine andere Bibliotheksmethode übergibt, und die Bibliotheksmethode löst eine Ausnahme aus, die an den Aufrufer übergeben werden muss.
Die reraise Funktion kann nicht für den with Konstruktblock trywith/in berechneten Listen, Arrays, Sequenzen oder Berechnungsausdrücken verwendet werden, einschließlich task { .. } oder .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@()