2012-05-21 4 views
6

Wenn ich folgendes ausführe, scheint Rettung für ArgumentError ignoriert zu werden. Die ArgumentError-Fehlermeldung von Ruby wird auf der Konsole angezeigt, meine puts-Nachricht jedoch nicht. Ich versuchte Rettung mit TypeError und ZeroDivisionError, und es hat funktioniert.Ruby ignoriert Rettung 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) 

Antwort

8

Die Ausnahme wird innerhalb der Funktion nicht geworfen, sondern an dem Punkt, wo es heißt, so dass Sie es woanders fangen müssen:

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 

Während das funktioniert, fängt ArgumentError ein sehr schlechte Idee, da es einen Fehler in Ihrem Code anzeigt, von dem Sie nicht wiederherstellen können.

+0

Danke. Ich habe das Programm geändert und jetzt funktioniert es wie erwartet. –

+1

@Kao: In diesem Fall, bitte in Betracht ziehen, eine Antwort zu akzeptieren, indem Sie auf das Häkchen auf der Seite klicken :) –

1

Die Rettung wird für diesen Teil des Codes durchgeführt: a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s. Ihre Ausnahme wird nicht in der Methode ausgelöst, sondern zum Zeitpunkt des Aufrufs, wenn Sie sehen, was ich meine.

+0

Ich verstehe es. Vielen Dank. –

Verwandte Themen