gpt4 book ai didi

Nil 类的 Ruby nomethoderror "each"

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:19 25 4
gpt4 key购买 nike

我有一些返回错误的代码,我不明白为什么。我是 Ruby 的新手,但我觉得我已经到了那里:

line 27: NoMethodError "each" for NilClass

我使用的代码如下:

require 'rubygems'
require 'nokogiri'
require 'sqlite3'

FIELDS = [['cityselect', 'VARCHAR'],['match', 'VARCHAR'], ['num_phone', 'NUMERIC'], ['name', 'VARCHAR'],['address', 'VARCHAR'] ]

DIV_ID = "#dgrSearch"
FILE_O = File.open('hold-data/directory-tel.txt', 'w')
FILE_O.puts( FIELDS.map{|f| f[0]}.join("\t") )

DB_NAME = "hold-data/directory-tel.sqlite"
File.delete(DB_NAME) if File.exists?DB_NAME
DATAB = SQLite3:Database.new( DB_NAME )

TABLE = "records_telephone"
DB_INSERT_STATEMENT = "INSERT into #{TABLE} values
(#{FIELDS.map{'?'}.join(',')})"

DATAB.execute "CREATE TABLE #{TABLE}(#{FIELDS.map{|f| "`#{f[0]}` #{f[1]}"}.join(', ')});"
FIELDS.each do |fn|
DATAB.execute "CREATE INDEX #{fn[2]} ON #{TABLE}(#{fn[0]})" unless fn[2].nil?
end

Dir.glob("hold-data/pages/*.html").reject{|f| f =~ /All match/}.each do |fname|
meta_stuff = File.basename(fname, '.html').split('--')
page = Nokogiri::HTML(open(fname))

page.css("#{DIV_ID} tr")[1..-2].each do |tr| # this is line #27
data_tds = tr.css('td').map{ |td|
td.text.gsub(/[$,](?=\d)/, '').gsub(/\302\240|\s/, ' ').strip
}

row_data = meta_stuff + data_tds
FILE_O.puts( data_row.join("\t"))
DATAB.execute(DB_INSERT_STATEMENT, row_data)

end
end

FILE_O.close

谁能看出我做错了什么?

最佳答案

如果您告诉我们错误发生在哪一行,下次会有用。

从它的外观来看,这里只有 1 行,您调用 each 的表达式可能会返回 nil:

page.css("#{DIV_ID} tr")[1..-2].each do

请记住,如果 the_arraythe_array[1..-2] 将返回 nil

所以 page.css("#{DIV_ID} tr") 可能会返回一个空数组,因此会出现错误。

如果没有出现这种行为,我会考虑调查为什么会发生这种情况,或者可能在调用 [1..-2] 之前检查数组是否为空 (见下文)。只是一个建议。

if page.css("#{DIV_ID} tr").empty?
#empty array
else
#not empty
end

关于Nil 类的 Ruby nomethoderror "each",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14603459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com