Ruby Exception Hierarchy
翻译自: http://blog.honeybadger.io/understanding-the-ruby-exception-hierarchy/
Ruby 中异常也是类. 异常的继承由异常类的继承决定.
这里是 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, 还会捕获其他继承自 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