Я пытаюсь преобразовать код Python в Ruby. Есть ли в Ruby эквивалент оператора try
в Python?
Рубиновый эквивалент для Python "попробуй"?
Ответ 1
Используйте это в качестве примера:
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.'
Ответ 2
begin
some_code
rescue
handle_error
ensure
this_code_is_always_executed
end
Подробности: http://crodrigues.com/try-catch-finally-equivalent-in-ruby/
Ответ 3
Если вы хотите перехватить определенный тип исключения, используйте:
begin
# Code
rescue ErrorClass
# Handle Error
ensure
# Optional block for code that is always executed
end
Этот подход предпочтительнее, чем "спасительный" блок, так как "спасение" без аргументов перехватит StandardError или любой его дочерний класс, включая NameError и TypeError.
Вот пример:
begin
raise "Error"
rescue RuntimeError
puts "Runtime error encountered and rescued."
end