Ruby应用程序无法识别自定义异常

时间:2018-02-22 19:16:10

标签: ruby class exception sequel

我在这里有一个非常基本的应用程序,我试图通过将类声明为该错误来更明显地制作错误和异常。相关课程为InvalidUserId,取代Sequel::DatabaseError

在主应用程序逻辑中,我尝试使用id通过self[:address]从数据库中获取用户。由于这是一种验证方法,因此输入不一定是id,而是电子邮件地址,这会导致模型失败并显示Sequel::DatabaseError

这很好,花花公子,但我的救援声明似乎并没有意识到InvalidUserId指向Sequel::DatabaseError,这意味着,当错误发生时,代码不会进入{ {1}}阻止。但是,如果我用rescue替换救援中的InvalidUserId,它会进入救援区。

Sequel::DatabaseError

我不确定为什么应用程序无法识别我的自定义错误,即使抛出的错误是我声明的错误。

编辑:看来这种制作自定义异常的方法只允许你加注,而不是捕获,是吗?

1 个答案:

答案 0 :(得分:1)

数据库查询正在引发异常。要将其添加到自定义类中,您需要解除正常异常,然后提高自定义异常,以便再次获救。在Ruby中,这需要另一层嵌套(你不能在一个块中进行救援/提升/救援)。

begin
  begin
    user = App::Model::User.where(id: self[:address]).first
  rescue Sequel::DatabaseError => exception
    raise InvalidUserId, exception.message
  end
rescue InvalidUserId
  # ...
end

除非你真的让异常消失,否则对我来说似乎不值得。立刻救出它有点失败了......