Array.hello
#NoMethodError: undefined method `hello' for Array:Class
#from (irb):3
#from /home/vladimir/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>'
hello
#NameError: undefined local variable or method `hello' for main:Object
#from (irb):4
#from /home/vladimir/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>'
def my_method()
raise "SomeError message ..." # raise "m" == raise RuntimeError.new("m")
end
my_method
#exceptions.rb:2:in `my_method': SomeError message ... (RuntimeError)
#from exceptions.rb:5:in `<main>'
class Book
attr_accessor :author, :page_count, :title
def initialize(args = {})
@author = args[:author]
self.page_count = args[:page_count]
@title = args[:title]
end
def page_count=(value)
min, max = 1, 1000
if value < min || value > max
raise RangeError, "Value of [#{value}] outside bounds of [#{min}] to
[#{max}]."
else
@page_count = value
end
end
end
begin
100 / 0
rescue
puts "F! Divider is zero!"
end
#=> F! Divider is zero!
begin
some_undefined_method_call
rescue NameError
puts "F! Undefined method!"
end
#=>F! Undefined method!
def hello(msg = "")
raise "Empty message!" if msg == ""
puts(msg)
rescue
puts "Some Error!"
end
hello("Rubydev.ru") #Rubydev.ru
hello #Some Error!
begin
some_undefined_method_call
rescue NameError
p "F! Undefined method!"
ensure
p "RubyDev.ru"
end
#=>"F! Undefined method!"
#=>"RubyDev.ru"
begin
3 / 0
rescue ZeroDivisionError => e
puts "#{e.class}: #{e.message}"
end
begin
"my string".odd?
rescue NoMethodError => e
puts "#{e.class}: #{e.message}"
end
class MyError < StandardError
attr_reader :thing
def initialize(msg="My default message", thing="apple")
@thing = thing
super(msg)
end
end
begin
raise MyError.new("my message", "my thing")
rescue => e
puts e.thing # "my thing"
end

Ruby Exceptions

  • 2.
    Array.hello #NoMethodError: undefined method`hello' for Array:Class #from (irb):3 #from /home/vladimir/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>' hello #NameError: undefined local variable or method `hello' for main:Object #from (irb):4 #from /home/vladimir/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>'
  • 4.
    def my_method() raise "SomeErrormessage ..." # raise "m" == raise RuntimeError.new("m") end my_method #exceptions.rb:2:in `my_method': SomeError message ... (RuntimeError) #from exceptions.rb:5:in `<main>'
  • 5.
    class Book attr_accessor :author,:page_count, :title def initialize(args = {}) @author = args[:author] self.page_count = args[:page_count] @title = args[:title] end def page_count=(value) min, max = 1, 1000 if value < min || value > max raise RangeError, "Value of [#{value}] outside bounds of [#{min}] to [#{max}]." else @page_count = value end end end
  • 6.
    begin 100 / 0 rescue puts"F! Divider is zero!" end #=> F! Divider is zero!
  • 7.
    begin some_undefined_method_call rescue NameError puts "F!Undefined method!" end #=>F! Undefined method! def hello(msg = "") raise "Empty message!" if msg == "" puts(msg) rescue puts "Some Error!" end hello("Rubydev.ru") #Rubydev.ru hello #Some Error!
  • 8.
    begin some_undefined_method_call rescue NameError p "F!Undefined method!" ensure p "RubyDev.ru" end #=>"F! Undefined method!" #=>"RubyDev.ru"
  • 9.
    begin 3 / 0 rescueZeroDivisionError => e puts "#{e.class}: #{e.message}" end begin "my string".odd? rescue NoMethodError => e puts "#{e.class}: #{e.message}" end
  • 10.
    class MyError <StandardError attr_reader :thing def initialize(msg="My default message", thing="apple") @thing = thing super(msg) end end begin raise MyError.new("my message", "my thing") rescue => e puts e.thing # "my thing" end