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 # ऊपर परिभाषित किसी भी अपवाद को रेस्क्यू करता है end