Рубиновый эквивалент для Python "попробуй"?

Я пытаюсь преобразовать код Python в Ruby. Есть ли в Ruby эквивалент оператора try в 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.'

Ответ 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