如何拯救某个命名空间下的所有异常?

gyl*_*laz 21 ruby exception-handling

有没有办法拯救某个命名空间下的所有异常?

例如,我想拯救所有Errno ::*异常(Errno :: ECONNRESET,Errno :: ETIMEDOUT).我可以继续在我的例外行列出所有内容,但我想知道我是否可以做类似的事情.

begin
  # my code
rescue Errno
  # handle exception
end
Run Code Online (Sandbox Code Playgroud)

上面的想法似乎不起作用,因此有类似的东西可以工作吗?

mu *_*ort 28

所有Errno异常子类SystemCallError:

Errno动态创建模块以将这些操作系统错误映射到Ruby类,每个错误号生成其自己的子类SystemCallError.由于子类是在模块中创建的Errno,因此它的名称将开始Errno::.

所以你可以陷阱SystemCallError,然后做一个简单的名称检查:

rescue SystemCallError => e
  raise e if(e.class.name.start_with?('Errno::'))
  # do your thing...
end
Run Code Online (Sandbox Code Playgroud)