我用 Java, 调用一个方法,该方法的 API 会告诉我会抛出哪些潜在的异常。但是 Ruby API (我用 Dash), 我却没办法知道,不可能只有等到运行一段时间后,才晓得有哪些异常抛出。比如 Net::HTTP.get_response. 怎么知道它会抛出哪些异常?
Net::HTTP.get_response
Java 也没法告诉你所有的异常类型吧?例如 A -> B -> C -> D 这样基层的函数调用,D 函数要抛出的异常你没法知道吧?
#1 楼 @huacnlee 那如何尽可能知道有哪些潜在异常抛出呢?
一般 Ruby 的各种库 API 文档的位置都有源代码的链接或源代码附带,里面一看就知道哪个函数会有什么异常可能抛出了
此外,像 Net::HTTP.get_response 你不需要了解到到底有哪些异常吧,你只需要处理正确的场景,异常统一打印日志就好了。
你不需要知道异常出来是什么类型,因为返回出来的都是继承自 Exception 的类型,所以:
除非你需要特性的处理,比如 Timeout,这个时候需要查查了
begin Net::HTTP.get_response('https://ruby-china.org') rescue => e # e 是一个 Exception 类型 # https://ruby-doc.org/core-2.2.0/Exception.html puts e.message end
另外,你可以阅读以下这篇文章:
https://ruby-china.org/topics/29104
#4 楼 @huacnlee 感谢!