ข้อยกเว้นเป็นเพียงคลาสใน 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 เท่านั้น แต่ยังรวมถึงข้อยกเว้นใด ๆ ที่สืบทอดมาจากมัน นั่นเป็นข้อยกเว้นที่คุณสนใจมาก
ในโค้ดของคุณเอง คุณอาจมีข้อยกเว้นที่กำหนดเองทั้งหมดรับช่วงมาจากคลาสฐานเดียว:
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