亲爱的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
答案 0 :(得分:1)
因为Crack::XML.parse(open(URL).read)["totals"]
是nil
。尝试将您在第7行上执行的呼叫分成几行并分别调试每个呼叫。也许你得到的答案不是你所期望的。
答案 1 :(得分:0)
鉴于从your source返回的xml的格式,Crack::XML.parse(open(URL).read)["totals"]
将像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