定制你的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. message
和e.response.headers[:traceid]
合并起来作为参数传递,生成MyError的一个实例 my_error
,并针对response的code做判断,如果code不在200~206, 则抛出my_error
.
这里,其实是将标准的出错信息加了个定制的尾巴,父对象StandardError接受到新的message,在出错时抛出。
OK啦。
很简单是不是?得空可以试试定制化你的exceptions:P
The end
参考: