Ruby equivalent for Python's "try"?

39,852

Solution 1

Use this as an example:

begin  # "try" block
    puts 'I am before the raise.'  
    raise 'An error has occurred.' # optionally: `raise Exception, "message"`
    puts 'I am after the raise.'   # won't be executed
rescue # optionally: `rescue Exception => ex`
    puts 'I am rescued.'
ensure # will always get executed
    puts 'Always gets executed.'
end 

The equivalent code in Python would be:

try:     # try block
    print('I am before the raise.')
    raise Exception('An error has occurred.') # throw an exception
    print('I am after the raise.')            # won't be executed
except:  # optionally: `except Exception as ex:`
    print('I am rescued.')
finally: # will always get executed
    print('Always gets executed.')

Solution 2

 begin
     some_code
 rescue
      handle_error  
 ensure 
     this_code_is_always_executed
 end

Details: http://crodrigues.com/try-catch-finally-equivalent-in-ruby/

Solution 3

If you want to catch a particular type of exception, use:

begin
    # Code
rescue ErrorClass
    # Handle Error
ensure
    # Optional block for code that is always executed
end

This approach is preferable to a bare "rescue" block as "rescue" with no arguments will catch a StandardError or any child class thereof, including NameError and TypeError.

Here is an example:

begin
    raise "Error"
rescue RuntimeError
    puts "Runtime error encountered and rescued."
end
Share:
39,852
thatonegirlo
Author by

thatonegirlo

Updated on July 05, 2022

Comments

  • thatonegirlo
    thatonegirlo almost 2 years

    I'm trying to convert some Python code into Ruby. Is there an equivalent in Ruby to the try statement in Python?

  • thatonegirlo
    thatonegirlo over 10 years
    Oh awesome! Thanks for also putting a python example. I'll "try" it! Haha!
  • thatonegirlo
    thatonegirlo over 10 years
    Great link! It's really helpful.
  • tadman
    tadman over 10 years
    There's also the quirky else clause that gets executed only if no exceptions have been triggered.
  • Jenuel Ganawed
    Jenuel Ganawed about 4 years
    this is most easieast answer and understandable, thanks thanks
  • d8aninja
    d8aninja over 3 years
    one of the best answers on SO from both a form and content perspective; much thanks