줄리아에서 예외처리하는 법
개요
지독한 외로움에 쩔쩔매본 사람은 알게되지 음 알게되지
코딩을 하다가 알수없는 에러에 고생해본 사람은 알게된다, 프로그래밍에 있어서 에러가 정말 중요하다는 사실을…
줄리아에서는 error()
함수 혹은 @error
매크로를 통해 에러를 낼 수 있다. 내장 예외는 줄리아 v1.63을 기준으로 25가지가 정의되어 있다1.
코드
julia> log(1 + 2im)
0.8047189562170501 + 1.1071487177940904im
가령 프로그램에서 로그 함수 $\log$ 를 사용할 때, 입력으로 오직 실수만 허용되어야하는 경우를 생각해볼 수 있다. 그러나 줄리아에서는 위와 같이 기본적으로 복소수로 확장된 $\log_{\mathbb{C}}$ 를 제공한다. 프로그램은 에러 없이 돌아간다고 능사가 아니다. 의도하지 않은 계산은 예상치 못한 문제를 일으키기 때문에, 우리가 원하지 않는 계산이 일어난다면 애초부터 에러를 내고 돌아가질 않아야한다.
원래의 log
의 정의역을 실수 $\mathbb{R}$ 으로 제한시키는 코드를 만들어보자.
error()
함수
julia> function Rlog(x)
if typeof(1 + 2im) <: Real
return log(x)
else
error(DomainError, ": Rlog allow real number only")
end
end
Rlog(1 + 2im)
ERROR: LoadError: DomainError: Rlog allow real number only
Stacktrace:
[1] error(::Type, ::String)
@ Base .\error.jl:42
[2] Rlog(x::Complex{Int64})
@ Main c:\admin\REPL.jl:7
[3] top-level scope
@ c:\admin\REPL.jl:11
in expression starting at c:\admin\REPL.jl:11
위의 Rlog
에서는 입력값이 실수가 아니면 DomainError
를 레이즈raise하도록 제한했다.
@error
매크로
julia> function Rlog2(x)
if typeof(1 + 2im) <: Real
return log(x)
else
@error "Rlog2 also allow Real number only"
end
end
Rlog2(1 + 2im)
┌ Error: Rlog2 also allow Real number only
└ @ Main c:\admin\REPL.jl:17
위의 Rlog2
에서는 입력값이 실수가 아니면 일단 에러를 쓰로throw하도록 제한했다.
레이즈raise와 쓰로throw는 똑같이 에러를 발생시킨다는 의미고 큰 맥락에서 차이가 없다. 레이즈는 파이썬 등에서 쓰이는 표현이고 쓰로는 자바 등에서 쓰이는 표현이다.
전체 코드
log(1 + 2im)
function Rlog(x)
if typeof(1 + 2im) <: Real
return log(x)
else
error(DomainError, ": Rlog allow real number only")
end
end
Rlog(1 + 2im)
function Rlog2(x)
if typeof(1 + 2im) <: Real
return log(x)
else
@error "Rlog2 also allow Real number only"
end
end
Rlog2(1 + 2im)
환경
- OS: Windows
- julia: v1.6.3