【发布时间】:2012-11-24 21:44:06
【问题描述】:
在 Ruby/Rails 中,是否有一个“包罗万象”的rescue 语句也允许更具体的rescue 可能性?我试过了
begin
# something
rescue URI::InvalidURIError
# do something
rescue SocketError
# do something else
rescue
# do yet another thing
end
事实证明,即使存在URI::InvalidURIError 或SocketError,它也会进入最后一个rescue(即它执行do yet another thing。)我希望它分别为do something 或do something else。
【问题讨论】:
-
首先,我怀疑当
URI::InvalidURIError或SocketError被提出时,它会进入最后一个rescue——这不是 Ruby 的工作方式。其次,您想要获得其他所有内容但具体的东西?不确定这是否具有语义意义,因为根据定义,包罗万象是不具体的。 -
我想也许他的意思是他需要一个解决方案来进行更具体的救援,因为他认为正确的方法是行不通的。也许真正发生的事情是在您期望的错误之前在块中抛出了一个不同的错误。您可能应该检查在最后一次救援中实际遇到的错误,看看发生了什么。
-
@numbers1311407 感谢您的建议。我如何检查我在上次救援中发现的错误?
-
Rails.logger.error(!$)或将救援更改为rescue => e,然后更改为Rails.logger.error(e)。它会显示在您的日志中。或者,继续加注,这样它就不会被区块中的raise $!抓住。 -
@AndrewMarshall 和 numbers1311407 你是对的。我误解了一些东西。谢谢大家!