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
Author by
thatonegirlo
Updated on July 05, 2022Comments
-
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 over 10 yearsOh awesome! Thanks for also putting a python example. I'll "try" it! Haha!
-
thatonegirlo over 10 yearsGreat link! It's really helpful.
-
tadman over 10 yearsThere's also the quirky
else
clause that gets executed only if no exceptions have been triggered. -
Jenuel Ganawed about 4 yearsthis is most easieast answer and understandable, thanks thanks
-
d8aninja over 3 yearsone of the best answers on SO from both a form and content perspective; much thanks