引发异常:字符串与自定义类

时间:2016-01-08 19:29:38

标签: ruby exception exception-handling

有什么好处:

ApiTokenExpired = Class.new(StandardError)
...
raise ApiTokenExpired if response.errorCode == 429

这个懒惰的选择:

raise 'api token expired' if response.errorCode == 429

考虑到这个错误检测只在代码中发生一次?

3 个答案:

答案 0 :(得分:3)

如果您必须以特定方式在调用堆栈中的某个位置处理错误,那么自定义错误(如ApiTokenExpired)有一个重要优势。

begin
  # ...
rescue ApiTokenExpired => error
  # handle the specific error
rescue => error
  # default error handling 
end

IMO决定创建自定义错误并不取决于项目的规模或未来的维护。

由于自定义错误类会导致额外的工作,因此我默认不使用它。当需要特殊的错误处理时,应该引入错误类。

答案 1 :(得分:1)

使用第一个,当代码嵌入到较大的软件中时,您可以选择性地挽救该类的错误。您仍然可以使用与错误消息字符串匹配的模式匹配第二个,但通常,您可能会因重构而改变消息格式(与使用第一个表单更改异常类的可能性相反),以及也可以有不同的异常,它们具有相似的消息字符串,这两种异常都可以破坏模式匹配。当你考虑未来的维护时,第一个更好。

答案 2 :(得分:1)

如果你的应用程序被设计为有错误处理或计划在将来使用(我的意思是,任何成功的系统都希望有一天,对吗?),你可以用字符串做的唯一事情就是读取它记录或在错误消息中显示它,使用类型,您可以以分离的方式编写各种事物。

例如,ApiTokenExpired可以通过“再试一次”响应来处理,因为它是一个外部问题,或者由更新API令牌所需的步骤处理(如果你使用了Typed Exception,你可以稍后插入它! ),也许你想要所有被认为是SEVERE或UNEXPECTED的错误向系统管理员发送电子邮件并存储错误频率的统计数据,类型化的例外允许你根据自己想做的事情编写任何你想做的事情。你的系统行为不端。