救援条款中的多项任务?

时间:2013-12-10 07:26:42

标签: ruby exception-handling variable-assignment

我遇到了这个示例代码作为Ruby中异常处理的习惯用法:

begin
  eval string
rescue SyntaxError, NameError => boom
  print "String doesn't compile: " + boom
rescue StandardError => bang
  print "Error running script: " + bang
end

我特别担心局部变量赋值行有多个例外: rescue SyntaxError, NameError => boom。这是否意味着本地变量boom将采用SyntaxErrorNameError对象?或者仅仅是NameError将被分配?

它进一步令人困惑,因为代码本身抛出TypeError,我想也许是因为string未定义,但这可能不是重点。

1 个答案:

答案 0 :(得分:1)

我在http://phrogz.net/programmingruby/tut_exceptions.html找到了上面的代码。那是你的来源吗?

无论如何,该代码中的局部变量都会被分配,无论引发哪个错误;它只是在最后一个之后指定的。

是的,它正在抛出TypeError,因为错误不会隐含地强加到今天的Ruby中的字符串。也许他们习惯于这本书最初出版时。您需要将.message添加到本地变量引用以获取错误消息(例如+ boom.message)。