最近我学到一个技巧,就是在代码的某一行使用rescue
,以防这一行出现错误(参见http://www.rubyinside.com/21-ruby-tricks-902.html的第21条)。我有些代码原本是这样的:
if obj['key'] && obj['key']['key2'] && obj['key']['key2']['name']
name = obj['key']['key2']['name']
else
name = ''
end
通过使用rescue
方法,我相信我可以将那段代码改写成类似于下面的形式:
name = obj['key']['key2']['name'] rescue ''
如果在访问哈希表的任何级别上抛出nil异常,它应该被rescue捕获并给我返回''(这是我想要的)。如果需要,我还可以选择将name设置为 nil
。这样做是否存在已知的危险?我之所以这样问是因为这看起来太美好了。我有很多丑陋的代码,我希望能摆脱掉,就像第一个代码示例那样。
rescue
是安全的。但是,在方法调用的末尾使用它时要非常小心,因为其他原因可能会引发异常,例如 I/O 错误或缺少数据库信息。调试这些情况真的非常困难,可能会让你发疯。 - the Tin Man