代码之家  ›  专栏  ›  技术社区  ›  Schneems

开始营救不捕捉错误

  •  24
  • Schneems  · 技术社区  · 16 年前

    代码块如下所示:

    # 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
    

    处理消息 将\u添加到\u处理的\u文件夹 处理虚假消息 . 也就是说,我是在生产环境中运行这段代码的,有时当我“收到”一封电子邮件(这是从rake任务运行的)时,它会随着 语法错误 .

    要查看错误消息,请签出 http://pastie.org/1028479 处理消息 它所指的是相同的 处理消息 上面。有什么原因吗 开始 营救 无法捕获此异常?

    2 回复  |  直到 16 年前
        1
  •  49
  •   Community Mohan Dere    9 年前

    rescue 如果没有参数,只会解救从 StandardError . 拯救一个 SyntaxError 使用 rescue SyntaxError .

    rescue Exception ,但请注意,这是一个坏主意(这就是为什么它不是 营救 )如前所述 here here

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

    抢救信号异常会阻止程序正确响应信号。除非杀掉-9,否则它将是不可战胜的。

        2
  •  3
  •   Suman Mukherjee    16 年前

    rescue 如果没有任何参数,则接受StandardError类引发的异常。您的错误类型是SyntaxError,它是从另一个名为ScriptError的类继承的。所有这些错误类都是异常类的子类。所以sepp2k建议使用 rescue Exception 捕捉各种异常。

    推荐文章