2012-05-21 6 views
6

Cuando ejecuto lo siguiente, el rescate parece ser ignorado por ArgumentError. Aparece el mensaje de error ArgumentError de Ruby en la consola, pero mi mensaje de puesta no. Intenté rescatar con TypeError y ZeroDivisionError, y funcionó.Ruby ignora el rescate 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) 

Respuesta

8

La excepción no se lanza dentro de la función, pero en el punto donde se llama, por lo que necesita para ponerse en otro lugar:

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 

Mientras que funciona, la captura de ArgumentError es una muy mala idea, ya que indica un error en su código del que no debería poder recuperarse.

+0

Gracias. Cambié el programa y ahora funciona como esperaba. –

+1

@Kao: En ese caso, considere aceptar una respuesta haciendo clic en el botón de al lado :) –

1

El rescate se realizará para esta parte del código: a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s. Su excepción se activa no en el método, sino en la hora de la llamada, si entiende lo que quiero decir.

+0

Lo entiendo. Gracias. –

Cuestiones relacionadas