2012-05-21 9 views
6

Po uruchomieniu poniższego, ratowanie wydaje się być ignorowane dla ArgumentError. Komunikat o błędzie ArgumentError z Ruby pojawia się na konsoli, ale moja wiadomość put nie. Próbowałem ratować z TypeError i ZeroDivisionError, i zadziałało.Ruby ignoruje ratowanie ArgumentError

def divide(a, b) 
    begin 
     a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s 
    rescue ArgumentError 
     puts 'there must be two arguments' 
    end 
end 

divide(4) 

Odpowiedz

8

Wyjątkiem nie jest generowany wewnątrz funkcji, ale w momencie, gdy jest on nazywany, więc trzeba go złapać gdzieś indziej:

def divide(a, b) 
    a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s 
end 

begin 
    divide(4) 
rescue ArgumentError 
    puts 'there must be two arguments' 
end 

Mimo, że działa, łowienie ArgumentError jest bardzo Zły pomysł, ponieważ wskazuje na błąd w kodzie, z którego nie można odzyskać.

+0

Dzięki. Zmieniłem program i teraz działa zgodnie z oczekiwaniami. –

+1

@Kao: W takim przypadku rozważ zaakceptowanie odpowiedzi klikając na przycisk z boku :) –

1

Pozwolenie zostanie wykonane dla tej części kodu: a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s. Twój wyjątek jest wywoływany nie w metodzie, ale w czasie rozmowy, jeśli widzisz co mam na myśli.

+0

Rozumiem. Dzięki. –

Powiązane problemy