PythonコードをRubyに変換しようとしています。Pythonのtry
ステートメントと同等のRubyがありますか?
これを例として使用します。
begin # "try" block
puts 'I am before the raise.'
raise 'An error has occured.' # 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
Pythonの同等のコードは次のようになります。
try: # try block
print 'I am before the raise.'
raise Exception('An error has occured.') # 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.'
begin
some_code
rescue
handle_error
ensure
this_code_is_always_executed
end
詳細: http://crodrigues.com/try-catch-finally-equivalent-in-Ruby/
特定の種類の例外をキャッチする場合は、次を使用します。
begin
# Code
rescue ErrorClass
# Handle Error
ensure
# Optional block for code that is always executed
end
このアプローチは、引数なしの「rescue」がNameErrorやTypeErrorを含むStandardErrorまたはその子クラスをキャッチするため、裸の「rescue」ブロックよりも望ましいです。
以下に例を示します。
begin
raise "Error"
rescue RuntimeError
puts "Runtime error encountered and rescued."
end