ruby – 如何捕获Errno :: ECONNRESET类在“case when”?

我的应用程序(Ruby 1.9.2)可能会引发不同的异常,包括网络连接断点。我救救异常=> e,然后做case /何时以不同的方式处理它们,但几个错误通过我的情况直接到别的。

rescue Exception => e
    p e.class
    case e.class
        when Errno::ECONNRESET
            p 1
        when Errno::ECONNRESET,Errno::ECONNABORTED,Errno::ETIMEDOUT
            p 2
        else
            p 3
    end
end

打印:

Errno::ECONNRESET
3
这是因为===操作符在类Class上工作

case语句internally calls ===对你正在评估的对象的方法。如果你想测试e类,你只是测试e,而不是e.class。这是因为e.class将落入when类的情况下,因为,好,e.class是一个类。

rescue Exception => e
    case e
        when Errno::ECONNRESET
            p 1
        when Errno::ECONNRESET,Errno::ECONNABORTED,Errno::ETIMEDOUT
            p 2
        else
            p 3
    end
end

是的,Ruby有时会有奇怪的语义

翻译自:https://stackoverflow.com/questions/3801469/how-to-catch-errnoeconnreset-class-in-case-when

转载注明原文:ruby – 如何捕获Errno :: ECONNRESET类在“case when”?