This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.

Raising an Exception (written by Steve Arneil)
CodeExpectedActual
def raise_exception
  puts 'I am before the raise.'
  raise 'An error has occurred.'
  puts 'I am after the raise.'
end
raise_exception
I am before the raise.
RuntimeError: An error has occurred
Error! (Exception?) Here's stdout:
I am before the raise.
RuntimeError: An error has occurred.
	from (irb):3:in `raise_exception'
	from (irb):6
def inverse(x)
  raise "Argument is not numeric" unless x.is_a? Numeric
  1.0 / x
end
inverse(2)
0.5 0.5
inverse('not a number')
RuntimeError: Argument is not numeric
...
RuntimeError: Argument is not numeric
	from (irb):8:in `inverse'
	from (irb):12
ObjectSpace.each_object(Class) do |x| 
  puts x if x.ancestors.member? Exception
end
ObjectSpace.each_object(Class) { |x| puts x if x.name =~ /Error$/ }
SystemStackError
LocalJumpError
EOFError
IOError
RegexpError
...
Exception2MessageMapper::ErrNotRegisteredException
IRB::Abort
SystemStackError
LocalJumpError
EOFError
IOError
RegexpError
Errno::EDQUOT
Errno::EREMOTEIO
Errno::EISNAM
Errno::ENAVAIL
Errno::ENOTNAM
Errno::EUCLEAN
Errno::ESTALE
Errno::EINPROGRESS
Errno::EALREADY
Errno::EHOSTUNREACH
Errno::EHOSTDOWN
Errno::ECONNREFUSED
Errno::ETIMEDOUT
Errno::ETOOMANYREFS
Errno::ESHUTDOWN
Errno::ENOTCONN
Errno::EISCONN
Errno::ENOBUFS
Errno::ECONNRESET
Errno::ECONNABORTED
Errno::ENETRESET
Errno::ENETUNREACH
Errno::ENETDOWN
Errno::EADDRNOTAVAIL
Errno::EADDRINUSE
Errno::EAFNOSUPPORT
Errno::EPFNOSUPPORT
Errno::EOPNOTSUPP
Errno::ESOCKTNOSUPPORT
Errno::EPROTONOSUPPORT
Errno::ENOPROTOOPT
Errno::EPROTOTYPE
Errno::EMSGSIZE
Errno::EDESTADDRREQ
Errno::ENOTSOCK
Errno::EUSERS
Errno::ESTRPIPE
Errno::ERESTART
Errno::EILSEQ
Errno::ELIBEXEC
Errno::ELIBMAX
Errno::ELIBSCN
Errno::ELIBBAD
Errno::ELIBACC
Errno::EREMCHG
Errno::EBADFD
Errno::ENOTUNIQ
Errno::EOVERFLOW
Errno::EBADMSG
Errno::EDOTDOT
Errno::EMULTIHOP
Errno::EPROTO
Errno::ECOMM
Errno::ESRMNT
Errno::EADV
Errno::ENOLINK
Errno::EREMOTE
Errno::ENOPKG
Errno::ENONET
Errno::ENOSR
Errno::ETIME
Errno::ENODATA
Errno::ENOSTR
Errno::EBFONT
Errno::EBADSLT
Errno::EBADRQC
Errno::ENOANO
Errno::EXFULL
Errno::EBADR
Errno::EBADE
Errno::EL2HLT
Errno::ENOCSI
Errno::EUNATCH
Errno::ELNRNG
Errno::EL3RST
Errno::EL3HLT
Errno::EL2NSYNC
Errno::ECHRNG
Errno::EIDRM
Errno::ENOMSG
Errno::ELOOP
Errno::ENOTEMPTY
Errno::ENOSYS
Errno::ENOLCK
Errno::ENAMETOOLONG
Errno::EDEADLK
Errno::ERANGE
Errno::EDOM
Errno::EPIPE
Errno::EMLINK
Errno::EROFS
Errno::ESPIPE
Errno::ENOSPC
Errno::EFBIG
Errno::ETXTBSY
Errno::ENOTTY
Errno::EMFILE
Errno::ENFILE
Errno::EINVAL
Errno::EISDIR
Errno::ENOTDIR
Errno::ENODEV
Errno::EXDEV
Errno::EEXIST
Errno::EBUSY
Errno::ENOTBLK
Errno::EFAULT
Errno::EACCES
Errno::ENOMEM
Errno::EAGAIN
Errno::ECHILD
Errno::EBADF
Errno::ENOEXEC
Errno::E2BIG
Errno::ENXIO
Errno::EIO
Errno::EINTR
Errno::ESRCH
Errno::ENOENT
Errno::EPERM
FloatDomainError
ZeroDivisionError
ThreadError
SystemCallError
NoMemoryError
SecurityError
RuntimeError
NotImplementedError
LoadError
SyntaxError
ScriptError
NoMethodError
NameError
RangeError
IndexError
ArgumentError
TypeError
StandardError
Interrupt
SignalException
fatal
SystemExit
Exception
RubyLex::TerminateLineInput
RubyLex::SyntaxError
RubyLex::TkReading2TokenDuplicateError
RubyLex::TkSymbol2TokenNoKey
RubyLex::TkReading2TokenNoKey
RubyLex::AlreadyDefinedToken
IRB::SLex::ErrNodeAlreadyExists
IRB::SLex::ErrNodeNothing
IRB::Notifier::ErrUnrecognizedLevel
IRB::Notifier::ErrUndefinedNotifier
IRB::UndefinedPromptMode
IRB::CantChangeBinding
IRB::CantShiftToMultiIrbMode
IRB::NoSuchJob
IRB::IrbSwitchedToCurrentThread
IRB::IrbAlreadyDead
IRB::IllegalParameter
IRB::CantReturnToNormalMode
IRB::NotImplementedError
IRB::UnrecognizedSwitch
Timeout::Error
SocketError
SystemStackError
LocalJumpError
EOFError
IOError
RegexpError
FloatDomainError
ZeroDivisionError
ThreadError
SystemCallError
NoMemoryError
SecurityError
RuntimeError
NotImplementedError
LoadError
SyntaxError
ScriptError
NoMethodError
NameError
RangeError
IndexError
ArgumentError
TypeError
StandardError
RubyLex::SyntaxError
RubyLex::TkReading2TokenDuplicateError
RubyToken::TkError
IRB::NotImplementedError
Timeout::Error
SocketError
def inverse(x)
  raise ArgumentError, 'Argument is not numeric' unless x.is_a? Numeric
  1.0 / x
end
class NotInvertibleError < StandardError
end
def inverse(x)
  raise NotInvertibleError, 'Argument is not numeric' unless x.is_a? Numeric
  1.0 / x
end
inverse('not a number')
NotInvertibleError: Argument is not numeric
...
NotInvertibleError: Argument is not numeric
	from (irb):24:in `inverse'
	from (irb):27