예외: raise 함수(F#)
raise 함수는 오류 또는 예외 조건이 발생했음을 알리는 데 사용됩니다. 오류에 대한 정보는 예외 개체에 캡처됩니다.
raise (expression)
설명
raise 함수는 예외 개체를 생성하고 스택 해제 프로세스를 시작합니다. 스택 해제 프로세스는 CLR(공용 언어 런타임)을 통해 관리되므로 이 프로세스의 동작은 다른 모든 .NET 언어의 경우와 동일합니다. 스택 해제 프로세스는 발생한 예외에 일치하는 예외 처리기를 검색하는 프로세스입니다. 현재 try...with 식이 있으면 이 식부터 검색을 시작합니다. 이때 with 블록의 각 패턴을 순서대로 검사합니다. 일치하는 예외 처리기를 발견하면 예외가 처리된 것으로 간주합니다. 그렇지 않으면 스택이 해제되고 일치하는 처리기를 만날 때까지 호출 체인을 거슬러 올라가며 with 블록을 검사합니다. 호출 체인에서 발견한 모든 finally 블록도 스택을 해제할 때 순서대로 실행됩니다.
raise 함수는 C# 또는 C++의 throw에 해당합니다. 호출 체인을 거슬러 올라가며 동일한 예외를 전파하려면 catch 처리기에 reraise를 사용합니다.
다음 코드 예제에서는 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