0

我有一些代码可以通过完全联系发出 API 请求,以解析公司名称列表的域,并将这些输出到 csv 表中。我发现代码在遇到 200 或 202 以外的响应代码时就会终止。

我写了以下救援块:

def get_parse_all
        ORG_ARRAY.each do |company_name|
            begin
                org_info = get_org_info(company_name)
            rescue
                next
            end
            parse_org_info(org_info)
        end
    end

问题是,我不知道如何在输出中仍然包含跳过的公司名称(由于错误的响应代码)。我得到了成功呼叫的列表,但我不知道哪些呼叫被跳过以及为什么。

我在下一个之前尝试puts "error"过,但它没有出现在输出 csv 中。如果我接下来删除,我会得到一个nil:NilClass (NoMethodError)

我已经阅读了一些文档,但我对此并不陌生,而且我很困惑。如果有人能指出我正确的方向,那将不胜感激!

预先感谢您的任何帮助 :)

4

1 回答 1

0

在这种情况下,听起来您要做的是遍历数组并将每个元素转换为另一个值。结果将是另一个数组,其中的每个元素要么是错误,要么是org_info错误。

为此,您将使用map而不是each. 请记住,each它不会返回块的结果,例如,无论您在块中做什么,ORG_ARRAY.each do都将始终返回。ORG_ARRAY

def get_parse_all
  ORG_ARRAY.map do |company_name|
    begin
      parse_org_info(get_org_info(company_name))
    rescue => e
      e
    end
  end
end

正如评论中提到的,您还应该避免使用“裸救援” - 救援更具体的错误而不是任何错误。

于 2020-04-20T17:19:39.160 回答