在线文档教程
Ruby 2.4

Exception Handling

异常处理

例外情况在begin/ end块中获救:

begin # code that might raise rescue # handle exception end

如果你在一个方法中,你不需要使用,begin或者end你想限制解救异常的范围:

def my_method # ... rescue # ... end

classmodule也是如此。

您可以通过=> variable_name在行尾使用将异常分配给本地变量rescue:

begin # ... rescue => exception warn exception.message raise # re-raise the current exception end

默认情况下,StandardError 及其子类被救出。您可以通过上市后他们抢救一组特定的异常类(及其子类)的rescue

begin # ... rescue ArgumentError, NameError # handle ArgumentError or NameError end

你可以用不同的方式拯救不同类型的例外:

begin # ... rescue ArgumentError # handle ArgumentError rescue NameError # handle NameError rescue # handle any StandardError end

例外与从顶部开始的救援部分相匹配,并且仅匹配一次。如果在开始部分引发了一个 ArgumentError,它将不会在 StandardError 部分中处理。

您可以重试获救的例外情况:

begin # ... rescue # do something that may change the result of the begin block retry end

执行将在开始块的开始处恢复,因此小心不要创建无限循环。

在救援块内部是唯一有效位置retry,所有其他用途将引发 SyntaxError。如果你想重试块迭代使用redo。详细信息请参阅控制表达式。

无论是否引发异常,都要运行一些代码,请使用ensure

begin # ... rescue # ... ensure # this always runs end

当没有引发异常时,您也可以运行一些代码:

begin # ... rescue # ... else # this runs only when no exception was raised ensure # ... end