Поделиться через


Исключения: функция raise (F#)

Функция raise указывает, что произошла ошибка или исключительное состояние. Сведения об ошибке зафиксированы в объекте исключения.

raise (expression)

Заметки

Функция raise создает объект исключения и инициирует процесс освобождения стека. Процесс освобождения стека управляется средой CLR, поэтому поведение этого процесса не отличается от его поведения в любом другом языке .NET. Процесс освобождения стека заключается в поиске обработчика исключений, соответствующего созданному исключению. Поиск начинается в текущем выражении try...with, если таковое имеется. По порядку проверяется каждый шаблон в блоке with. Если найден соответствующий обработчик исключений, считается, что исключение обработано; в противном случае стек освобождается, а блоки with в цепочке вызовов проверяются до тех пор, пока не будет найден подходящий обработчик исключений. Любые блоки finally, найденные в цепочке вызовов, также последовательно выполняются в процессе освобождения стека.

Функция raise эквивалентна функции throw в C# или C++. Используйте reraise в обработчике catch для распространения этого же исключения вверх по цепочке вызовов.

В следующих примерах кода проиллюстрировано использование функции raise для создания исключения.

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

Функцию raise можно также использовать для создания исключений .NET, как показано в следующем примере.

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

См. также

Ссылки

Типы исключений (F#)

Исключения: выражение try...with (F#)

Выражения: выражение try...finally (F#)

Исключения. Функция failwith (F#)

Исключения: функция invalidArg (F#)

Другие ресурсы

Обработка исключений (F#)