【发布时间】:2020-12-15 23:03:08
【问题描述】:
我希望使用下面的 sn-p 等异常层次结构语法来拯救、引发和再次拯救异常。
class InnerCustomError < StandardError
def initialize(msg = "inner")
super
end
end
class OuterCustomError < StandardError
def initialize(msg = "outer")
super
end
end
begin
raise InnerCustomError
rescue InnerCustomError
raise OuterCustomError
rescue OuterCustomError, StandardError => e
e.message
end
但这会引发 ==> OuterCustomError (outer)
为什么会出现这种行为?相反,我希望它被救出..
我知道下面的嵌套开始结束块用于实现相同的目的,
begin
begin
raise InnerCustomError
rescue InnerCustomError
raise OuterCustomError
end
rescue OuterCustomError, StandardError => e
e.message
end
我也知道这个想法会影响性能,但我想了解前者是如何解释的?
【问题讨论】:
-
否则,当(重新)从
rescue中引发异常时,您很容易陷入无限循环。 -
顺便说一句,你想达到什么目的?仅仅为了挽救它而引发异常似乎没有多大意义。
-
哦,这是一个非常常见的模式。在我的用例中,我有一个 API 控制器,它实际上处理所有 JTW InvalidTokenErrors* 并将其重新提升为 customError,最终将再次捕获以构建HTTP 状态 423 的错误响应阻止用户并强制客户端再次实际登录..