रुबी में अपवाद सिर्फ कक्षाएं हैं। अपवाद अपवाद पदानुक्रम उन सभी वर्गों से बना है जो अपवाद से इनहेरिट करते हैं।
यहां रूबी 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