如何在ruby中的定制你的exception?

定制你的exception。

写在前面

在ruby中抛出异常时,除了输出程序本身的exception之外,你可能还希望它输出一些其他信息,例如指出是哪个文件,对应的id是什么等,以便后期查找。

这时,可以通过定制ruby的exception来解决。

正文

看个场景:

以接口测试的一个情况为例,说明一下怎么玩。

用户A在做接口测试时,使用restclient的get, put, post, delete发出请求,出错,这时,用户A除了希望获取到rest client本身的Exception外,还希望可以输出reponse.headers中的traceid, 类似这样:

那么如何将traceid加入到exception的message内容中去呢?

重新定义一个class,继承自ruby的StandardError, 将需要输出的信息作为变量传递给该class即可。

具体这么来:

新建一个class : MyError

在使用restclient时,raise 异常即可。具体代码类似这样👇:

简单说明一下:

我们去获取网站example.com首页的内容,用rescue来捕捉异常,并将restclient的异常信息e. messagee.response.headers[:traceid]合并起来作为参数传递,生成MyError的一个实例 my_error ,并针对response的code做判断,如果code不在200~206, 则抛出my_error.

这里,其实是将标准的出错信息加了个定制的尾巴,父对象StandardError接受到新的message,在出错时抛出。

OK啦。

很简单是不是?得空可以试试定制化你的exceptions:P

The end

参考:

Custom exceptions in Ruby

Ruby’s Exception vs StandardError: What’s the difference?Â