2009-03-26 9 views
3

私は単に、自分のメソッド呼び出しで、呼び出されるメソッドで発生する可能性のあるすべての "NoMethodError"例外を抑制します。Rubyの例外処理:NoMethodErrorを抑制できません。

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

しかし、これは機能しません。 NoMethodErrorはトップレベルに引き上げられます。

正確なエラーがundefined method []である:あなたが少なくグローバル何かをしたい場合は、あなたが狭いクラス、あるいは特定のインスタンス上でこれを行うことができます」nilのためNilClass'(NoMethodError)

+0

bar1とbar2がNMEを投げたとしても、このコードはうまく動作します。 fooが呼び出された場所にコードを投稿できますか? – Pesto

+0

正確なエラーは 'undefined method' [] 'for nil:NilClass'(NoMethodError) –

+0

私にとってはうまく動作します。 –

答えて

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

class << my_object 
    # and so forth 
0

あなたのコードは正常に動作します。

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

以降、あなたがしようとしていること:あなたのエラーから外挿する

、私はあなたが実際のコードをしているものです推測していることより、このようなものです

obj[ 'whatever' ] 

をそしてundefined method []' for nil:NilClass' (NoMethodError)を取得します。これは、MyClass#[]メソッドを間違って定義したb/cではなく、objMyClassのインスタンスではありません。nilです。おそらく、以前の呼び出しの結果として。

関連する問題