Wie gehe ich damit um, wenn ich nicht weiß, welche Ausnahmen von einer Bibliotheksmethode in Ruby ausgelöst werden können?

Dies ist eine ziemlich weit gefasste Frage, die mir jedoch beim Programmieren in Ruby weiterhin begegnet. Ich habe hauptsächlich einen C- und Java-Hintergrund. Wenn ich eine Bibliotheksfunktion oder -methode verwende, schaue ich in der Dokumentation nach, was bei Fehlern zurückgegeben wird (normalerweise in C) oder welche Ausnahmen es auslösen kann (in Java).

In Ruby sieht die Situation völlig anders aus. Im Moment muss ich einige JSON-Daten analysieren, die ich von einem Server erhalte:

data = JSON.parse(response)

Das erste, was ich nach dem Schreiben dieses Codes denke, ist natürlich, was ist, wenn die Eingabe schlecht ist? Istparse Wird im Fehlerfall nil zurückgeben oder eine Ausnahme auslösen, und wenn ja, welche?

Ich überprüfe die Dokumentation (http://flori.github.com/json/doc/JSON.html#M000022) und sehen Sie einfach:

"Analysieren Sie die JSON-Stringquelle in eine Ruby-Datenstruktur und geben Sie sie zurück."

Dies ist nur ein Beispiel für ein Muster, auf das ich in Ruby wiederholt gestoßen bin. Ursprünglich dachte ich, es sei ein Mangel an der Dokumentation der Bibliothek, mit der ich gearbeitet habe, aber jetzt fange ich an, dies als Standardpraxis zu betrachten, und bin in einer etwas anderen Denkweise als Ruby-Programmierer. Gibt es eine Konvention, von der ich nichts weiß?

Wie gehen Entwickler damit um?

(Und ja, ich habe mir den Code der Bibliotheksmethode angesehen und kann eine Vorstellung davon bekommen, welche Ausnahmen ausgelöst werden, aber ich kann nicht 100% sicher sein, und wenn er nicht dokumentiert ist, fühle ich mich unwohl, wenn ich mich darauf verlasse.)

BEARBEITEN: Lassen Sie mich nach den ersten beiden Antworten das JSON-Parsing-Beispiel von oben fortsetzen.

Ich vermute, ich sollte nicht tun:

begin
  data = JSON.parse(response)
  raise "parse error" if data.nil?
rescue Exception => e
  # blahblah
end

weil ich mir den code / die tests anschauen kann und sehe, dass er anscheinend einen auslöstParserError on error (das Zurückgeben von nil scheint in Ruby nicht üblich zu sein). Würde ich zu Recht sagen, dass die empfohlene Vorgehensweise Folgendes ist:

begin
  data = JSON.parse(response)
rescue JSON::ParserError => e
  # blahblah
end

... basierend auf dem, was ich gelernt habeParserError durch den Code und Tests suchen?

(Ich habe das Beispiel auch bearbeitet, um zu verdeutlichen, dass es sich um eine Antwort von einem Server handelt, den ich analysiere.)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage