Обработка исключений в Ruby: не может подавить NoMethodError - PullRequest
3 голосов
/ 26 марта 2009

Я просто хочу, чтобы мой вызов метода подавлял все исключения "NoMethodError", которые могут возникнуть в методах, которые он в свою очередь вызывает.

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

Но это не работает. NoMethodError продолжает подниматься до верхнего уровня.

Точная ошибка undefined method [] для nil: NilClass (NoMethodError)

Ответы [ 2 ]

9 голосов
/ 26 марта 2009
class Object
    def method_missing(meth,*args)
        # do whatever you want here
        end
    end

Если вы хотите что-то менее глобальное, вы можете сделать это в более узком классе или даже в конкретном экземпляре:

class << my_object
    # and so forth
0 голосов
/ 26 марта 2009

Ваш код, как указано, работает нормально.

Экстраполируя вашу ошибку, я предполагаю, что вы на самом деле код похож на это:

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

И что позже вы пытаетесь:

obj[ 'whatever' ]

И получаю undefined method []' for nil:NilClass' (NoMethodError). Этого не происходит, потому что вы неправильно определили метод MyClass#[], это потому что ваш obj не является экземпляром MyClass, это nil. Возможно, в результате более раннего звонка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...