Wie kann man ein Eval in Ruby retten?
Ich versuche, herauszufinden, wie zu retten syntax-Fehler, die kommen, wenn eval()
ing-code in Ruby 1.8.6.
Ich würde erwarten, dass die folgenden Ruby-code:
#!/usr/bin/ruby
good_str = "(1+1)"
bad_str = "(1+1" # syntax error: missing closing paren
begin
puts eval(good_str)
puts eval(bad_str)
rescue => exc
puts "RESCUED!"
end
produzieren Folgendes Ergebnis, wenn Sie ausgeführt wird:
2
RESCUED!
Statt, was ich bekomme, ist:
2
eval_rescue.rb:8: (eval):1: compile error (SyntaxError)
(eval):1: syntax error, unexpected $end, expecting ')'
Scheint es, dass der SyntaxError-ausgelöst durch die eval-Methode wird gerettet, die irgendwo innerhalb des eval, ohne mir eine chance zu handhaben, es selbst.
Jemand eine Idee, wie man das Verhalten, das ich will (also, für meine "Rettung" - Klausel, um den Fehler abzufangen, die aus dem 'eval')?
InformationsquelleAutor der Frage Brent Chapman | 2009-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brent schon eine Antwort, das funktioniertaber ich empfehle die Rettung aus der kleinsten Reihe von Ausnahmen, die Sie Weg erhalten können mit. Das macht Sie sicher, dass Sie nicht versehentlich verschlang etwas, was Sie nicht bedeuten.
So,
InformationsquelleAutor der Antwort James A. Rosen
Gut, das war einfach...
Es stellt sich heraus, dass standardmäßig der "rescue" - Anweisung nicht fangen alle Ausnahmen, aber nur diejenigen werden, die Unterklassen der Standardfehler. SyntaxError ist ein Geschwister/cousin der Standardfehler, keine Unterklasse sein, so die Rettungs-Erklärung nicht erfassen, es sei denn ausdrücklich gesagt.
Haben die rescue-block erfassen alle Ausnahmen, die Sie benötigen, um den code zu ändern, um die folgenden:
Beachten Sie die änderung in der "rescue" - Linie von "rescue => ü" zu "retten Ausnahme => exc".
Nun, wenn Sie den code ausführen, erhalten Sie die gewünschten Ergebnisse:
InformationsquelleAutor der Antwort Brent Chapman