我遇到了这个示例代码作为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
将采用SyntaxError
或NameError
对象?或者仅仅是NameError
将被分配?
它进一步令人困惑,因为代码本身抛出TypeError
,我想也许是因为string
未定义,但这可能不是重点。
答案 0 :(得分:1)
我在http://phrogz.net/programmingruby/tut_exceptions.html找到了上面的代码。那是你的来源吗?
无论如何,该代码中的局部变量都会被分配,无论引发哪个错误;它只是在最后一个之后指定的。
是的,它正在抛出TypeError
,因为错误不会隐含地强加到今天的Ruby中的字符串。也许他们习惯于这本书最初出版时。您需要将.message
添加到本地变量引用以获取错误消息(例如+ boom.message
)。