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
raise
Funktion wird verwendet, um anzugeben, dass ein Fehler oder eine außergewöhnliche Bedingung aufgetreten ist. Informationen zum Fehler werden in einem Ausnahmeobjekt erfasst. - Die
reraise
Funktion 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 try
with
/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@()