开始救援不捕捉错误

我正在使用包裹在开始 - 救援块中的一些ruby代码,但不知何故它仍然崩溃。

代码块如下所示:

# Retrieve messages from server
def get_messages
  @connection.select('INBOX')
  @connection.uid_search(['ALL']).each do |uid|
    msg = @connection.uid_fetch(uid,'RFC822').first.attr['RFC822']
    begin
      process_message(msg)
      add_to_processed_folder(uid) if @processed_folder
    rescue
       handle_bogus_message(msg)
    end
    # Mark message as deleted 
    @connection.uid_store(uid, "+FLAGS", [:Seen, :Deleted])
  end
end

鉴于此代码,我会假设如果process_messageadd_to_processed_folder无法执行,然后救援将踢入并调用handle_bogus_message 。 这就是说我在生产环境中运行这段代码,有时当我“收到”一封电子邮件(这是从一个rake任务运行的)时,它会随着一个SyntaxError而死。

一看错误消息退房http://pastie.org/1028479并不算process_message,它指的是上述相同process_message。 是否有任何理由开始 - 营救不会赶上这个例外?


rescue不带参数只是抢救,从继承异常StandardError 。 要拯救SyntaxError使用rescue SyntaxError

为了拯救所有的异常,你可以使用rescue Exception ,但请注意,这是一个坏主意(这就是为什么它不是rescue的默认行为),如这里和这里所解释的。 尤其是这部分:

救援中断阻止用户使用CTRLC退出程序。

拯救SignalException会阻止程序正确响应信号。 除了kill -9之外,它将不可驱动。


不带任何参数的rescue接受StandardError类引发的异常。 您的错误类型是从另一个名为ScriptError的类继承的SyntaxError。 所有这些错误类都是Exception类的子类。 因此sepp2k建议使用rescue Exception来捕获各种异常。

链接地址: http://www.djcxy.com/p/25843.html

上一篇: Begin Rescue not catching error

下一篇: Which is the shortest way to silently ignore a Ruby exception