web-dev-qa-db-fra.com

Ruby équivalent pour "essayer" Python?

J'essaie de convertir du code Python en Ruby. Y a-t-il un équivalent dans Ruby à l'instruction try en Python?

39
thatonegirlo

Utilisez ceci comme exemple:

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 

Le code équivalent dans Python serait:

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.'
65
Óscar López
 begin
     some_code
 rescue
      handle_error  
 ensure 
     this_code_is_always_executed
 end

Détails: http://crodrigues.com/try-catch-finally-equivalent-in-Ruby/

9
zengr

Si vous souhaitez intercepter un type particulier d'exception, utilisez:

begin
    # Code
rescue ErrorClass
    # Handle Error
ensure
    # Optional block for code that is always executed
end

Cette approche est préférable à un bloc "sauvetage" nu car "sauvetage" sans arguments interceptera une erreur standard ou toute classe enfant de celle-ci, y compris NameError et TypeError.

Voici un exemple:

begin
    raise "Error"
rescue RuntimeError
    puts "Runtime error encountered and rescued."
end
0
Zags