Ruby Language Vérification des erreurs différentes


Exemple

Si vous voulez faire des choses différentes en fonction du type d'erreur, utilisez plusieurs clauses de rescue , chacune avec un type d'erreur différent en tant qu'argument.

def divide(x, y)
  begin
    return x/y
  rescue ZeroDivisionError
    puts "Don't divide by zero!"
    return nil
  rescue TypeError
    puts "Division only works on numbers!"
    return nil
  end
end

> divide(10, 0)
Don't divide by zero!

> divide(10, 'a')
Division only works on numbers!

Si vous souhaitez enregistrer l'erreur à utiliser dans le bloc de rescue :

rescue ZeroDivisionError => e

Utilisez une clause de rescue sans argument pour intercepter les erreurs d'un type non spécifié dans une autre clause de rescue .

def divide(x, y)
  begin
    return x/y
  rescue ZeroDivisionError
    puts "Don't divide by zero!"
    return nil
  rescue TypeError
    puts "Division only works on numbers!"
    return nil
  rescue => e
    puts "Don't do that (%s)" % [e.class]
    return nil
  end
end

> divide(nil, 2)
Don't do that (NoMethodError)

Dans ce cas, essayer de diviser nil par 2 n'est pas un ZeroDivisionError ou un TypeError , donc il est géré par la clause de rescue par défaut, qui imprime un message pour nous informer qu'il s'agit d'une NoMethodError .