예외는 Ruby의 클래스일 뿐입니다. 예외 예외 계층은 Exception에서 상속되는 모든 클래스로 구성됩니다.
다음은 Ruby 2.1의 표준 라이브러리에 대한 예외 계층입니다.
Exception
NoMemoryError
ScriptError
LoadError
NotImplementedError
SyntaxError
SecurityError
SignalException
Interrupt
StandardError -- default for rescue
ArgumentError
UncaughtThrowError
EncodingError
FiberError
IOError
EOFError
IndexError
KeyError
StopIteration
LocalJumpError
NameError
NoMethodError
RangeError
FloatDomainError
RegexpError
RuntimeError -- default for raise
SystemCallError
Errno::*
ThreadError
TypeError
ZeroDivisionError
SystemExit
SystemStackError
실용적 사용
예외를 클래스 트리로 정리하는 이유는 유사한 유형의 예외를 쉽게 구출할 수 있기 때문입니다.
예를 들어 다음 코드를 고려하십시오.
begin
do_something
rescue StandardError => e
end
이렇게 하면 StandardError뿐만 아니라 그로부터 상속되는 모든 예외도 구출됩니다. 당신이 관심을 가질 만한 거의 모든 예외가 발생합니다.
자신의 코드에서 모든 사용자 정의 예외가 단일 기본 클래스에서 상속되도록 할 수 있습니다.
module MyLib
class Error < StandardError
end
class TimeoutError < Error
end
class ConnectionError < Error
end
end
...
begin
do_something
rescue MyLib::Error => e
# Rescues any of the exceptions defined above
end