DEV Community

K-Sato
K-Sato

Posted on

Ruby Exception handling

Table of contents

Basic Syntax

The basic syntax of ruby's exception handling looks like this.

begin 
  # Code that potentially raises an error  
rescue => e # variable
  # Execute if there was an error between begin and rescue.
end
Enter fullscreen mode Exit fullscreen mode

Example

begin 
  raise 
rescue => e
  p e #=> RuntimeError
end
Enter fullscreen mode Exit fullscreen mode

Relevant methods

Method Explanation
Object#class Returns the class of the receiver.
Kernel#raise Raise an error.
Exception#backtrace Returns the backtrace of the error.
Exception#message Returns the error message.

Example

begin 
  raise StandardError.new("Message")
rescue => e
  p e.class #=> StandardError
  p e.message #=> "Message"
  p e.backtrace #=> ["(repl):4:in `<main>'", "/run_dir/repl.rb:41:in `eval'", "/run_dir/repl.rb:41:in `run'", "/run_dir/repl.rb:57:in `handle_eval'", "/run_dir/repl.rb:170:in `start'", "/run_dir/repl.rb:177:in `start'", "/run_dir/repl.rb:181:in `<main>'"]
end
Enter fullscreen mode Exit fullscreen mode

Ensure

You can run something regardless of the existence of an error with ensure

Example

begin 
  "no Error"
rescue => e
  p e.message
ensure 
  p "Ensured" #=> Ensured
end
Enter fullscreen mode Exit fullscreen mode

Example2

begin 
  raise StandardError.new('error')
rescue => e
  p e.message #=> error
ensure 
  p "Ensured" #=> Ensured
end
Enter fullscreen mode Exit fullscreen mode

Retry

Literally re-try the execution.

Example

file = ARGV[0]

begin
  # Open a file.
  io = File.open( file )
rescue
  # If there was an error during opening the file, this part gets executed.

  sleep( 10 )
  # Goes back to begin and re-try the execution.
  retry
end
Enter fullscreen mode Exit fullscreen mode

Rescue modifier

You can write begin ~ rescue in one sentence just like if ~ end in Ruby.

Example

raise "Error" rescue p "rescued" #=> rescued
Enter fullscreen mode Exit fullscreen mode

Exception in methods

You don't need to write begin and end to do exception handling in methods.

Example

def method
 raise 'error'
 rescue => e 
  p e.message #=> error
 ensure
  p 'ensured' #=> ensured
end
method #=> "error"
Enter fullscreen mode Exit fullscreen mode

Multiple Exceptions

You can write rescue multiple times for each corresponding error.

begin 
  rescue Exception1, Exception2 => e
  # For Exception1 or Exception2
  rescue Exception3 => e
  # For Exception3
  rescue => e
   # For other errors.
end
Enter fullscreen mode Exit fullscreen mode

Example

begin 
  raise StandardError
  rescue StandardError, RangeError   
    p 'Standard or Ranage Error'
  rescue RuntimeError
    p 'Runtime Error'
  rescue => e
    p 'some other error'
end

#=> "Standard or Ranage Error"
Enter fullscreen mode Exit fullscreen mode

Custom Exception

Simply Follow the steps below.

(1) Make a new Class

class CustomError < StandardError
end
Enter fullscreen mode Exit fullscreen mode

(2) Add a message

class CustomError < StandardError
  def initialize(msg="My Error")
    super
  end
end
Enter fullscreen mode Exit fullscreen mode

(3) Add custom data attributes to your exception

class CustomError < StandardError
  attr_reader :atr
  def initialize(msg="My Error", atr="atrribute")
    @atr = atr
    super(msg)
  end
end
Enter fullscreen mode Exit fullscreen mode

Example

class CustomError < StandardError
  attr_reader :atr

  def initialize(msg="My Error", atr="atrribute")
    @atr = atr
    super(msg)
  end
end


begin
  raise CustomError.new("CustomMessage", "Custom Attribute")
rescue => e
  p e.message #=> "CustomMessage"
  p e.atr  #=> "Custom Attribute"
end
Enter fullscreen mode Exit fullscreen mode

References

Top comments (4)

Collapse
 
the20co_com profile image
The20Co

Exception handling is one of the important parts of any programming language. The basic features of exception handling have been around in Ruby since version 1.9 However, if you are not used to a strong typing language and protected mode in Ruby, you may easily miss an easier way to catch and handle exceptions. Congratulations Message For New Home

Collapse
 
tommydiones profile image
TommyDiones

Too many codes, that I don't understand. One day I'll be able to read those codes and also know what those means. But for now, I'll just focus on my recovery from drug addiction with the help of the Transcend Recovery Community.

Collapse
 
coderzpro profile image
Coderzpro • Edited

In ruby, exception managing is a technique which describes a way to deal with the error raised in a software. Here ENGLISH LANGUAGE PROGRAM , error manner an unwanted or unexpected event, which takes place at some stage in the execution of a program, i.E. At run time, that disrupts the regular waft of this system’s instructions. So those sorts of errors have been handled via the rescue block.

Collapse
 
meave9786 profile image
meave9786

It is the best blog to all over read it thanks for share how do you get robux for free this information and start be great fun any time.