2012-05-21 10 views
6

Quando si esegue quanto segue, il salvataggio sembra essere ignorato per ArgumentError. Il messaggio di errore ArgumentError da Ruby viene visualizzato sulla console, ma il messaggio di posta non lo fa. Ho provato il salvataggio con TypeError e ZeroDivisionError, e ha funzionato.Ruby ignora il salvataggio 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) 

risposta

8

L'eccezione non viene lanciata all'interno della funzione, ma nel punto in cui viene chiamato, quindi è necessario prendere da qualche altra parte:

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 

Mentre funziona, recuperando ArgumentError è molto cattiva idea, in quanto indica un errore nel codice da cui non si dovrebbe essere in grado di recuperare.

+0

Grazie. Ho cambiato il programma e ora funziona come previsto. –

+1

@Kao: In tal caso, considera di accettare una risposta facendo clic sul pulsante di spunta sul lato :) –

1

Il salvataggio verrà eseguito per questa parte di codice: a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s. La tua eccezione viene attivata non nel metodo, ma in fase di chiamata, se vedi cosa intendo.

+0

Ho capito. Grazie. –

Problemi correlati