Das ist eine ziemlich weit gefasste Frage, aber ich stoße immer noch darauf, wenn ich in Ruby programmiere. Ich komme aus einem weitgehend C- und Java-Hintergrund, wo ich, wenn ich eine Bibliotheksfunktion oder -methode verwende, die Dokumentation anschaue und sehe, was sie bei einem Fehler zurückliefert (normalerweise in C) oder welche Ausnahmen sie werfen kann (in Java).Wie geht man damit um, wenn man nicht weiß, welche Ausnahmen durch eine Bibliotheksmethode in Ruby ausgelöst werden können?
In Ruby scheint die Situation völlig anders. Gerade jetzt brauche ich einig JSON ich von einem Server empfangen zu analysieren:
data = JSON.parse(response)
natürlich das erste, was ich denke, nach diesem Code zu schreiben ist, was passiert, wenn der Eingang schlecht ist? Wird parse
bei einem Fehler auf Null gesetzt oder eine Ausnahme ausgelöst, und wenn ja, welche?
ich in der Dokumentation (http://flori.github.com/json/doc/JSON.html#M000022) und sehen einfach wie folgt:
„Analysieren Sie die JSON-String Quelle in eine Struktur Ruby-Daten und senden Sie es.“
Dies ist nur ein Beispiel für ein Muster, das ich in Ruby wiederholt durchlaufen habe. Ursprünglich dachte ich, es wäre ein Mangel an Dokumentation der Bibliothek, mit der ich arbeitete, aber jetzt fange ich an zu fühlen, dass dies Standard ist, und ich bin in einer etwas anderen Denkweise als Ruby-Programmierer. Gibt es eine Konvention, von der ich keine Ahnung habe?
Wie gehen Entwickler damit um?
(Und ja, ich habe mir den Code der Bibliotheksmethode angeschaut und kann eine Vorstellung davon bekommen, welche Ausnahmen ausgelöst werden, aber ich kann nicht 100% sicher sein und wenn es nicht dokumentiert ist, fühle ich mich unwohl.)
EDIT: Nach dem Betrachten der ersten beiden Antworten, lassen Sie mich das JSON-Parsing-Beispiel von oben fortsetzen.
Ich vermute, ich nicht tun sollte:
begin
data = JSON.parse(response)
raise "parse error" if data.nil?
rescue Exception => e
# blahblah
end
, weil ich an den Code/Tests schauen und sehen, scheint es ein ParserError
auf Fehler zu erhöhen (nil Rückkehr scheint nicht üblich zu sein in Ruby). Würde ich sagen die empfohlene Praxis richtig sein zu tun ist:
begin
data = JSON.parse(response)
rescue JSON::ParserError => e
# blahblah
end
... basierend auf dem, was ich über ParserError
, indem Sie durch den Code und Tests gelernt?
(I bearbeitet auch das Beispiel zu klären es eine Antwort von einem Server ist, dass ich das Parsen bin.)
einverstanden, schreiben Sie alle möglichen Spezifikationen/Tests für Ihre Eingabedaten in Ihre Methode und entwickeln Sie Ihre Anwendung, um diese Ausnahmen zu verwalten. – Jirapong
Das ist ein guter Punkt, und ich werde von nun an die Tests betrachten. – user85509