带消息的Rescue Exception

时间:2012-10-16 08:19:07

标签: ruby exception error-handling

我得到异常Thrift::TransportException (end of file reached),我想用消息(“文件结束到达”)来拯救它。

现在我做

begin
  #...
rescue Thrift::TransportException => e
  raise e unless "end of file reached" == e.message
  # do whatever if it is not end of file reached.
end

有没有办法做这个红宝石?

2 个答案:

答案 0 :(得分:5)

如果可以避免,不要依赖于消息的逻辑 - 消息只是文本,Thrift的开发者可以在任何给定的时间点自由更改它们,打破你的应用程序。

Thrift中的

TransportException有一个type,这是你可以看到here的常数之一。与您相关的是END_OF_FILE

至于代码中的实现,没有比在rescue块中更好的方法来检查异常的属性,所以:

begin
  #...
rescue Thrift::TransportException => e
  raise e unless e.type == Thrift::TransportException::END_OF_FILE
  # do whatever if it is not end of file reached.
end

答案 1 :(得分:0)

你不需要在raise块中rescue,我建议你把一个实例变量显示在你想要的任何地方。而且,1==a非常难看,就像blue is a sky

begin
  #...
rescue Thrift::TransportException => e
  @error = e.message if e.message == "end of file reached"
  # do whatever if it is not end of file reached.
end