Ruby Language Un bloc de gestion des erreurs de base


Exemple

Faisons une fonction pour diviser deux nombres, cela fait très confiance à ses entrées:

def divide(x, y)
  return x/y
end

Cela fonctionnera très bien pour beaucoup d'entrées:

> puts divide(10, 2)
5

Mais pas tout

> puts divide(10, 0)
ZeroDivisionError: divided by 0

> puts divide(10, 'a')
TypeError: String can't be coerced into Fixnum

Nous pouvons réécrire la fonction en encapsulant l'opération de division risquée dans un bloc begin... end pour vérifier les erreurs et utiliser une clause rescue pour générer un message et renvoyer nil s'il y a un problème.

def divide(x, y)
  begin
    return x/y
  rescue
    puts "There was an error"
    return nil
  end
end

> puts divide(10, 0)
There was an error

> puts divide(10, 'a')
There was an error