# # Raised when the arguments are wrong and there isn't a more specific Exception # class. # # Ex: passing the wrong number of arguments # # [1, 2, 3].first(4, 5) # # *raises the exception:* # # ArgumentError: wrong number of arguments (given 2, expected 1) # # Ex: passing an argument that is not acceptable: # # [1, 2, 3].first(-4) # # *raises the exception:* # # ArgumentError: negative array size # class ArgumentError < StandardError end # # The exception class which will be raised when pushing into a closed Queue. # See Thread::Queue#close and Thread::SizedQueue#close. # class ClosedQueueError < StopIteration end # # EncodingError is the base class for encoding errors. # class EncodingError < StandardError end # # Raised by some IO operations when reaching the end of file. Many IO methods # exist in two forms, # # one that returns `nil` when the end of file is reached, the other raises # EOFError. # # EOFError is a subclass of IOError. # # file = File.open("/etc/hosts") # file.read # file.gets #=> nil # file.readline #=> EOFError: end of file reached # file.close # class EOFError < IOError end # # Raised when attempting to convert special float values (in particular # `Infinity` or `NaN`) to numerical classes which don't support them. # # Float::INFINITY.to_r #=> FloatDomainError: Infinity # class FloatDomainError < RangeError end # # Raised when there is an attempt to modify a frozen object. # # [1, 2, 3].freeze << 4 # # *raises the exception:* # # FrozenError: can't modify frozen Array # class FrozenError[T] < RuntimeError # # Construct a new FrozenError exception. If given the *receiver* parameter may # subsequently be examined using the FrozenError#receiver method. # # a = [].freeze # raise FrozenError.new("can't modify frozen array", receiver: a) # def initialize: (?string? msg, ?receiver: T?) -> void # # Return the receiver associated with this FrozenError exception. # def receiver: () -> T? end # # Raised when the given index is invalid. # # a = [:foo, :bar] # a.fetch(0) #=> :foo # a[4] #=> nil # a.fetch(4) #=> IndexError: index 4 outside of array bounds: -2...2 # class IndexError < StandardError end # # Raised when the interrupt signal is received, typically because the user has # pressed Control-C (on most posix platforms). As such, it is a subclass of # `SignalException`. # # begin # puts "Press ctrl-C when you get bored" # loop {} # rescue Interrupt => e # puts "Note: You will typically use Signal.trap instead." # end # # *produces:* # # Press ctrl-C when you get bored # # *then waits until it is interrupted with Control-C and then prints:* # # Note: You will typically use Signal.trap instead. # class Interrupt < SignalException def initialize: (?string) -> void end # # Raised when an IO operation fails. # # File.open("/etc/hosts") {|f| f << "example"} # #=> IOError: not opened for writing # # File.open("/etc/hosts") {|f| f.close; f.read } # #=> IOError: closed stream # # Note that some IO failures raise `SystemCallError`s and these are not # subclasses of IOError: # # File.open("does/not/exist") # #=> Errno::ENOENT: No such file or directory - does/not/exist # class IOError < StandardError end # # Raised when the specified key is not found. It is a subclass of IndexError. # # h = {"foo" => :bar} # h.fetch("foo") #=> :bar # h.fetch("baz") #=> KeyError: key not found: "baz" # class KeyError[K, R] < IndexError # # Construct a new `KeyError` exception with the given message, receiver and key. # def initialize: (?string msg, ?receiver: R?, ?key: K?) -> void # # Return the key caused this KeyError exception. # def key: () -> K? # # Return the receiver associated with this KeyError exception. # def receiver: () -> R? end # # Raised when a file required (a Ruby script, extension library, ...) fails to # load. # # require 'this/file/does/not/exist' # # *raises the exception:* # # LoadError: no such file to load -- this/file/does/not/exist # class LoadError < ScriptError # # the path failed to load # def path: () -> String? end # # Raised when Ruby can't yield as requested. # # A typical scenario is attempting to yield when no block is given: # # def call_block # yield 42 # end # call_block # # *raises the exception:* # # LocalJumpError: no block given (yield) # # A more subtle example: # # def get_me_a_return # Proc.new { return 42 } # end # get_me_a_return.call # # *raises the exception:* # # LocalJumpError: unexpected return # class LocalJumpError < StandardError # # Returns the exit value associated with this `LocalJumpError`. # def exit_value: () -> untyped # # The reason this block was terminated: :break, :redo, :retry, :next, :return, # or :noreason. # def reason: () -> Symbol end # # Raised when a given name is invalid or undefined. # # puts foo # # *raises the exception:* # # NameError: undefined local variable or method `foo' for main:Object # # Since constant names must start with a capital: # # Integer.const_set :answer, 42 # # *raises the exception:* # # NameError: wrong constant name answer # class NameError[T] < StandardError # # Construct a new NameError exception. If given the *name* parameter may # subsequently be examined using the NameError#name method. *receiver* parameter # allows to pass object in context of which the error happened. Example: # # [1, 2, 3].method(:rject) # NameError with name "rject" and receiver: Array # [1, 2, 3].singleton_method(:rject) # NameError with name "rject" and receiver: [1, 2, 3] # def initialize: (?string msg, ?String? name, ?receiver: T?) -> void # # Return a list of the local variable names defined where this NameError # exception was raised. # # Internal use only. # def local_variables: () -> ::Array[Symbol] # # Return the name associated with this NameError exception. # def name: () -> String? # # Return the receiver associated with this NameError exception. # def receiver: () -> T? end class NoMatchingPatternError < StandardError end class NoMatchingPatternKeyError[M, K] < NoMatchingPatternError # # Construct a new `NoMatchingPatternKeyError` exception with the given message, # matchee and key. # def initialize: (?string message, matchee: M, key: K) -> void # # Return the matchee associated with this NoMatchingPatternKeyError exception. # def matchee: () -> M # # Return the key caused this NoMatchingPatternKeyError exception. # def key: () -> K end # # Raised when memory allocation fails. # class NoMemoryError < Exception end # # Raised when a method is called on a receiver which doesn't have it defined and # also fails to respond with `method_missing`. # # "hello".to_ary # # *raises the exception:* # # NoMethodError: undefined method `to_ary' for an instance of String # class NoMethodError[T] < NameError[T] # # Construct a NoMethodError exception for a method of the given name called with # the given arguments. The name may be accessed using the `#name` method on the # resulting object, and the arguments using the `#args` method. # # If *private* argument were passed, it designates method was attempted to call # in private context, and can be accessed with `#private_call?` method. # # *receiver* argument stores an object whose method was called. # def initialize: (?string? msg, ?String? name, ?Array[untyped] args, ?boolish `private`, ?receiver: T?) -> void # # Return the arguments passed in as the third parameter to the constructor. # def args: () -> Array[untyped] # # Return true if the caused method was called as private. # def private_call?: () -> bool end # # Raised when a feature is not implemented on the current platform. For example, # methods depending on the `fsync` or `fork` system calls may raise this # exception if the underlying operating system or Ruby runtime does not support # them. # # Note that if `fork` raises a `NotImplementedError`, then `respond_to?(:fork)` # returns `false`. # class NotImplementedError < ScriptError end # # Raised when a given numerical value is out of range. # # [1, 2, 3].drop(1 << 100) # # *raises the exception:* # # RangeError: bignum too big to convert into `long' # class RangeError < StandardError end # # Raised when given an invalid regexp expression. # # Regexp.new("?") # # *raises the exception:* # # RegexpError: target of repeat operator is not specified: /?/ # class RegexpError < StandardError end # # A generic error class raised when an invalid operation is attempted. # Kernel#raise will raise a RuntimeError if no Exception class is specified. # # raise "ouch" # # *raises the exception:* # # RuntimeError: ouch # class RuntimeError < StandardError end # # ScriptError is the superclass for errors raised when a script can not be # executed because of a `LoadError`, `NotImplementedError` or a `SyntaxError`. # Note these type of `ScriptErrors` are not `StandardError` and will not be # rescued unless it is specified explicitly (or its ancestor `Exception`). # class ScriptError < Exception end # # No longer used by internal code. # class SecurityError < Exception end # # Raised when a signal is received. # # begin # Process.kill('HUP',Process.pid) # sleep # wait for receiver to handle signal sent by Process.kill # rescue SignalException => e # puts "received Exception #{e}" # end # # *produces:* # # received Exception SIGHUP # class SignalException < Exception # # Construct a new SignalException object. `sig_name` should be a known signal # name. # def initialize: (?string sig_name) -> void | (int sig_number, ?string sig_name) -> void def signm: () -> String # # Returns a signal number. # def signo: () -> Integer end # # The most standard error types are subclasses of StandardError. A rescue clause # without an explicit Exception class will rescue all StandardErrors (and only # those). # # def foo # raise "Oups" # end # foo rescue "Hello" #=> "Hello" # # On the other hand: # # require 'does/not/exist' rescue "Hi" # # *raises the exception:* # # LoadError: no such file to load -- does/not/exist # class StandardError < Exception end # # Raised to stop the iteration, in particular by Enumerator#next. It is rescued # by Kernel#loop. # # loop do # puts "Hello" # raise StopIteration # puts "World" # end # puts "Done!" # # *produces:* # # Hello # Done! # class StopIteration < IndexError # # Returns the return value of the iterator. # # o = Object.new # def o.each # yield 1 # yield 2 # yield 3 # 100 # end # # e = o.to_enum # # puts e.next #=> 1 # puts e.next #=> 2 # puts e.next #=> 3 # # begin # e.next # rescue StopIteration => ex # puts ex.result #=> 100 # end # def result: () -> untyped end # # Raised when encountering Ruby code with an invalid syntax. # # eval("1+1=2") # # *raises the exception:* # # SyntaxError: (eval):1: syntax error, unexpected '=', expecting $end # class SyntaxError < ScriptError # # Construct a SyntaxError exception. # def initialize: (?string msg) -> void # # the path failed to parse # def path: () -> String? end # # SystemCallError is the base class for all low-level platform-dependent errors. # # The errors available on the current platform are subclasses of SystemCallError # and are defined in the Errno module. # # File.open("does/not/exist") # # *raises the exception:* # # Errno::ENOENT: No such file or directory - does/not/exist # class SystemCallError < StandardError # # If *errno* corresponds to a known system error code, constructs the # appropriate Errno class for that error, otherwise constructs a generic # SystemCallError object. The error number is subsequently available via the # #errno method. # def initialize: (string msg, Integer errno) -> void # # Return `true` if the receiver is a generic `SystemCallError`, or if the error # numbers `self` and *other* are the same. # def self.===: (untyped other) -> bool # # Return this SystemCallError's error number. # def errno: () -> Integer end # # Raised by `exit` to initiate the termination of the script. # class SystemExit < Exception # # Create a new `SystemExit` exception with the given status and message. Status # is true, false, or an integer. If status is not given, true is used. # def initialize: () -> void | (string msg) -> void | (true | false | int status, ?string msg) -> void # # Return the status value associated with this system exit. # def status: () -> Integer # # Returns `true` if exiting successful, `false` if not. # def success?: () -> bool end # # Raised in case of a stack overflow. # # def me_myself_and_i # me_myself_and_i # end # me_myself_and_i # # *raises the exception:* # # SystemStackError: stack level too deep # class SystemStackError < Exception end # # Raised when an invalid operation is attempted on a thread. # # For example, when no other thread has been started: # # Thread.stop # # This will raises the following exception: # # ThreadError: stopping only thread # note: use sleep to stop forever # class ThreadError < StandardError end # # Raised when encountering an object that is not of the expected type. # # [1, 2, 3].first("two") # # *raises the exception:* # # TypeError: no implicit conversion of String into Integer # class TypeError < StandardError end # # Raised when `throw` is called with a *tag* which does not have corresponding # `catch` block. # # throw "foo", "bar" # # *raises the exception:* # # UncaughtThrowError: uncaught throw "foo" # class UncaughtThrowError < ArgumentError # # Document-class: UncaughtThrowError # # Raised when `throw` is called with a *tag* which does not have corresponding # `catch` block. # # throw "foo", "bar" # # *raises the exception:* # # UncaughtThrowError: uncaught throw "foo" # def initialize: (untyped tag, untyped value) -> void # # Return the tag object which was called for. # def tag: () -> untyped # # Returns formatted message with the inspected tag. # def to_s: () -> String # # Return the return value which was called for. # def value: () -> untyped end # # Raised when attempting to divide an integer by 0. # # 42 / 0 #=> ZeroDivisionError: divided by 0 # # Note that only division by an exact 0 will raise the exception: # # 42 / 0.0 #=> Float::INFINITY # 42 / -0.0 #=> -Float::INFINITY # 0 / 0.0 #=> NaN # class ZeroDivisionError < StandardError end