这是一个有点宽泛的问题,但它是我在使用 Ruby 编程时不断遇到的问题。我主要来自 C 和 Java 背景,当我使用库函数或方法时,我会查看文档并查看它在错误时返回什么(通常在 C 中)或它可以抛出哪些异常(在 Java 中)。
在 Ruby 中,情况似乎完全不同。刚才我需要解析一些从服务器收到的 JSON:
data = JSON.parse(response)
自然,我写完这段代码后首先想到的是,如果输入不好怎么办?是否parse
会在出错时返回 nil,或者引发一些异常,如果是,是哪些?
我检查了文档(http://flori.github.com/json/doc/JSON.html#M000022)并简单地查看:
“将 JSON 字符串源解析为 Ruby 数据结构并返回。”
这只是我在 Ruby 中反复遇到的一个模式示例。最初,我认为这是我正在使用的任何库的文档的一些缺陷,但现在我开始觉得这是标准做法,我的心态与 Ruby 程序员有些不同。有什么我不知道的约定吗?
开发人员如何处理这个问题?
(是的,我确实查看了库方法的代码,并且可以了解引发了哪些异常,但我不能 100% 确定,如果没有记录,我依赖它会感到不舒服。)
编辑:查看前两个答案后,让我继续上面的 JSON 解析示例。
我怀疑我不应该这样做:
begin
data = JSON.parse(response)
raise "parse error" if data.nil?
rescue Exception => e
# blahblah
end
因为我可以查看代码/测试并看到它似乎引发了ParserError
错误(返回 nil 似乎不是 Ruby 中的标准做法)。我是否正确地说推荐的做法是:
begin
data = JSON.parse(response)
rescue JSON::ParserError => e
# blahblah
end
...基于我ParserError
通过查看代码和测试所学到的知识?
(我还编辑了示例以澄清它是来自我正在解析的服务器的响应。)