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动态创建模块以将这些操作系统错误映射到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)