Ruby处理多个异常

示例

您可以在同一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