Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
- A
raisefunção é usada para indicar que ocorreu um erro ou uma condição excepcional. Informações sobre o erro são capturadas em um objeto de exceção. - A
reraisefunção é usada para propagar uma exceção manipulada na cadeia de chamadas.
Sintaxe
raise (expression)
Observações
A raise função gera um objeto de exceção e inicia um processo de desenrolamento de pilha. O processo de desenrolamento de pilha é gerenciado pelo CLR (Common Language Runtime), portanto, o comportamento desse processo é o mesmo que em qualquer outro idioma do .NET. O processo de desenrolamento de pilha é uma pesquisa para um manipulador de exceção que corresponde à exceção gerada. A pesquisa será iniciada na expressão atual try...with , se houver uma. Cada padrão no with bloco é verificado, em ordem. Quando um manipulador de exceção correspondente é encontrado, a exceção é considerada tratada; caso contrário, a pilha é descomprupada e with os blocos da cadeia de chamadas são verificados até que um manipulador correspondente seja encontrado. Todos os finally blocos encontrados na cadeia de chamadas também são executados em sequência à medida que a pilha desenrola.
A raise função é equivalente a throw em C# ou C++.
Os exemplos de código a seguir ilustram o uso da raise função para gerar uma exceção.
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
A raise função também pode ser usada para gerar exceções do .NET, conforme mostrado no exemplo a seguir.
let divide x y =
if (y = 0) then raise (System.ArgumentException("Divisor cannot be zero!"))
else
x / y
Reraising an exception
A reraise função pode ser usada em um with bloco para propagar uma exceção manipulada na cadeia de chamadas.
reraise não assume um operando de exceção. É mais útil quando um método passa um argumento de um chamador para algum outro método de biblioteca e o método de biblioteca gera uma exceção que deve ser passada para o chamador.
A reraise função não pode ser usada no with bloco de trywith/constructos em listas computadas, matrizes, sequências ou expressões de computação, incluindo 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@()