相关疑难解决方法(0)

为什么在Ruby中"拯救Exception => e`是不好的风格?

Ryan Davis的Ruby QuickRef说(没有解释):

不要救援Exception.EVER.或者我会刺伤你

为什么不?什么是正确的做法?

ruby exception-handling

876
推荐指数
6
解决办法
28万
查看次数

如何处理不知道Ruby中的库方法可以引发什么异常?

这是一个广泛的问题,但在Ruby编程时我会继续遇到这个问题.我来自一个很大的C和Java背景,当我使用库函数或方法时,我查看文档并查看错误返回的内容(通常在C中)或它可以抛出的异常(在Java中).

在Ruby中,情况似乎完全不同.刚才我需要解析从服务器收到的一些JSON:

data = JSON.parse(response)
Run Code Online (Sandbox Code Playgroud)

当然,在编写这段代码后我想到的第一件事就是如果输入不好怎么办?是否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
Run Code Online (Sandbox Code Playgroud)

因为我可以查看代码/测试并看到它似乎引发了一个ParserError错误(返回nil似乎不是Ruby中的标准做法).我是否正确地说建议的做法是:

begin
  data = JSON.parse(response)
rescue JSON::ParserError => e
  # blahblah
end
Run Code Online (Sandbox Code Playgroud)

...基于我ParserError通过查看代码和测试了解到的内容?

(我还编辑了这个例子,以澄清它是我正在解析的服务器的响应.)

ruby exception-handling exception rescue

20
推荐指数
1
解决办法
9353
查看次数

标签 统计

exception-handling ×2

ruby ×2

exception ×1

rescue ×1