2009-03-26 3 views
3

Je souhaite simplement que l'appel de ma méthode supprime toutes les exceptions "NoMethodError" qui peuvent apparaître dans les méthodes appelées à son tour.Gestion des exceptions Ruby: impossible de supprimer NoMethodError

def foo 
    begin 
    bar1 
    bar2 
    rescue Exception 
    return '--' 
    end 
end 

Mais cela ne fonctionne pas. NoMethodError continue d'être élevé au niveau supérieur.

L'erreur exacte est undefined method [] » pour nil: NilClass' (NoMethodError)

+0

Ce code fonctionne bien pour moi, même si bar1 et bar2 lancent des NME. Pouvez-vous poster le code où foo est appelé? – Pesto

+0

l'erreur exacte est 'méthode non définie' [] 'pour nil: NilClass' (NoMethodError) –

+0

Fonctionne très bien pour moi aussi. –

Répondre

9
class Object 
    def method_missing(meth,*args) 
     # do whatever you want here 
     end 
    end 

Si vous voulez quelque chose de moins globale, vous pouvez le faire sur une classe plus étroite, ou même une instance spécifique:

class << my_object 
    # and so forth 
0

Votre code tel que donné fonctionne très bien.

extrapolant à partir de votre erreur, je devine ce que vous êtes code actuel est plus comme ceci:

class MyClass 
    def [](arg) 
    self.bim 
    self.bam 
    self.boom 
    rescue Exception 
    "--" 
    end 
end 

et que vous essayez plus tard:

obj[ 'whatever' ] 

Et obtenir undefined method []' for nil:NilClass' (NoMethodError) . Cela ne se produit pas car vous avez défini incorrectement la méthode MyClass#[], c'est votre/votre obj n'est pas une instance de MyClass, c'est nil. Probablement à la suite d'un appel précédent.

Questions connexes