Exceções: o aumento de função (F#)

O raise função é usada para indicar que um erro ou condição excepcional ocorreu. Informações sobre o erro são capturadas em um objeto de exceção.

raise (expression)

Comentários

O raise função gera um objeto de exceção e inicia um processo de desenrolamento pilha. O processo de desenrolamento de pilha é gerenciado pelo common language runtime (CLR), portanto, o comportamento desse processo é o mesmo, assim como em qualquer outro.NET compatível. O processo de desenrolamento de pilha é uma pesquisa para um manipulador de exceção que coincida com a exceção gerada. A pesquisa começa a atual try...with expressão, se houver um. Cada padrão na with bloco é verificado na ordem. Quando um manipulador de exceções correspondente for encontrado, a exceção é considerada o tratado; Caso contrário, a pilha é organizada e with blocos de cadeia de chamadas são verificados, até que um manipulador correspondente seja encontrado. Qualquer finally blocos são encontrados na cadeia de chamada também são executados em seqüência conforme a pilha se desdobra.

O raise função é equivalente a throw em C# ou C++. Use reraise em um manipulador catch para propagar a mesma exceção até a cadeia de chamada.

Os exemplos de código a seguir ilustram o uso de 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

O raise função também pode ser usada para elevar.NET exceções, conforme mostrado no exemplo a seguir.

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

Consulte também

Referência

Tipos de exceções (F#)

Exceções: O bloco try... com a expressão (F#)

Exceções: O bloco try... finalmente expressão (F#)

Exceções: A função (F#) de failwith

Exceções: A função (F#) de invalidArg

Outros recursos

Exceção de tratamento (F#)