0

亲爱的 stackoverflow 社区,

初学者的问题:为什么会出现以下错误?

scraper_sample_2.rb:7:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)
>Exit code: 1

这是我的代码(从 ruby​​ 的介绍指南中复制):

require "rubygems"
require "crack"
require "open-uri"

URL = "http://www.recovery.gov/pages/GetXmlData.aspx?data=recipientHomeMap"

Crack::XML.parse(open(URL).read)["totals"]["state"].each do |state|
    puts ["id", "awarded", "received", "jobs"].map{|f| state[f]}.join(",")
end
4

2 回答 2

1

因为Crack::XML.parse(open(URL).read)["totals"]nil。尝试将您在第 7 行进行的调用拆分为几行,并分别调试每个调用。也许你得到的答案不是你所期望的。

于 2013-03-29T11:20:51.810 回答
0

鉴于从您的源Crack::XML.parse(open(URL).read)["totals"]返回的 xml 格式,正如 Ivaylo 所说,将返回nil。xml 的格式必须已更改,就像totals现在在/map/view.

要获得预期的输出,请将您的代码更改为:

Crack::XML.parse(open(URL).read)["map"]["view"]["totals"]["state"].each do |state|
    puts ["id", "awarded", "received", "jobs"].map{|f| state[f]}.join(",")
end
于 2013-03-30T07:45:19.910 回答