例外が発生すると、例外クラスがインスタンス化され rescue 句でキャッチできる。
すべての例外の基底クラスは Exception であり、このクラスから派生した多数のクラスが存在する。
以下にそれらを挙げる。
- ArgumentError
- Channel/ClosedError
- CSV/MalformedCSVError
- Digest/FinalizedError
- DivisionByZeroError
- Enumerable/EmptyError
- Enumerable/NotFoundError
- File/AccessDeniedError
- File/AlreadyExistsError
- File/BadExecutableError
- File/BadPatternError
- File/NotFoundError
- Server/ClientError
- IndexError
- InvalidByteSequenceError
- IO.EOFError
- IO.TimeoutError
- JSON/SerializableError
- KeyError
- NilAssertionError
- NotImplementedError
- OpenSSL/Digest/UnsupportedError
- OverflowError
- RuntimeError
- Socket/ConnectError
- System/Group/NotFoundError
- System/User/NotFoundError
- SystemError
- Time/FloatingTimeConversionError
- Time/Location/InvalidLocationNameError
- Time/Location/InvalidTimezoneOffsetError
- Time/Location/InvalidTZDataError
- WinError
これらを rescue 句で使う場合、Ruby と書き方が異なるので注意すること。下に例を示す。
a = {A:0, B:2}
begin
a["A"]
puts "OK"
rescue e: KeyError
puts e.message
rescue e: RuntimeError
puts e.message
rescue
puts "Fatal error"
end