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


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