Joh*_*ler 33 ruby syntax error-handling
在ruby中捕获错误,使用该rescue
语句.通常这种说法发生在begin
和之间end
.也可以使用rescue
语句作为block(do ... end
)或方法(def ... end
)的一部分.我的问题是什么其他结构(循环,而如果,......),如果有任何将拯救巢内?
klo*_*ner 44
您只能在两种情况下使用救援:
在一个begin ... end
街区内
begin
raise
rescue
nil
end
Run Code Online (Sandbox Code Playgroud)作为语句修饰符
i = raise rescue nil
Run Code Online (Sandbox Code Playgroud)函数,模块和类体(感谢Jörg)是隐式begin...end
块,因此您可以在没有显式begin
/的任何函数内进行挽救end
.
def foo
raise
rescue
nil
end
Run Code Online (Sandbox Code Playgroud)
块形式采用可选的参数列表,指定哪些异常(和后代)rescue
:
begin
eval string
rescue SyntaxError, NameError => boom
print "String doesn't compile: " + boom
rescue StandardError => bang
print "Error running script: " + bang
end
Run Code Online (Sandbox Code Playgroud)
如果将内联作为语句修饰符调用,或者在begin
/ end
block中没有参数,则rescue将捕获StandardError
及其后代.
这是关于的1.9文档rescue
.
pim*_*pin 11
正如最近的评论中所说,自 Ruby 2.5 以来,响应已经发生了变化。
do ... end
块现在是隐式begin ... end
块;如模块、类和方法体。
内联块{...}
仍然不能。