您可以在同一rescue声明中处理多个错误:
begin # 可能失败的执行 rescue FirstError, SecondError => e # 如果发生FirstError或SecondError则执行某些操作 end
您还可以添加多个rescue声明:
begin # 可能失败的执行 rescue FirstError => e # 如果发生FirstError则执行某些操作 rescue SecondError => e # 如果发生SecondError则执行某些操作 rescue => e # 如果发生StandardError则执行某些操作 end
rescue块的顺序是相关的:第一个匹配是执行的匹配。因此,如果您将StandardError条件放在首位,并且所有异常都继承自StandardError,则其他rescue语句将永远不会执行。
begin # 可能失败的执行 rescue => e # 这将吞噬所有错误 rescue FirstError => e # 如果发生FirstError则执行某些操作 rescue SecondError => e # 如果发生SecondError则执行某些操作 end
某些块具有隐含的异常处理一样def,class和module。这些块使您可以跳过begin语句。
def foo ... rescue CustomError ... ensure ... end