Ruby equivalent for Python's "try"?
Question:
I’m trying to convert some Python code into Ruby. Is there an equivalent in Ruby to the try
statement in Python?
Answers:
begin
some_code
rescue
handle_error
ensure
this_code_is_always_executed
end
Details: http://crodrigues.com/try-catch-finally-equivalent-in-ruby/
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 StandardError => 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.')
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
I’m trying to convert some Python code into Ruby. Is there an equivalent in Ruby to the try
statement in Python?
begin
some_code
rescue
handle_error
ensure
this_code_is_always_executed
end
Details: http://crodrigues.com/try-catch-finally-equivalent-in-ruby/
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 StandardError => 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.')
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