我正在使用一些包装在 begin - rescue 块中的 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_message或add_to_processed_folder无法执行,则救援将启动并调用handle_bogus_message。话虽如此,我在生产环境中运行此代码,有时当我“收到”一封电子邮件(这是从 rake 任务运行的)时,它会因SyntaxError而死。
要查看错误消息,请查看http://pastie.org/1028479 而不是它所指的process_message与上面的process_message相同。有什么理由开始-救援不会捕获这个异常吗?