時々エラーが発生します。ここでは基本的なプログラムがあります:未定義のメソッド[]をnilに修正する方法:OpenUriのNilClass
require 'open-uri'
require 'json'
require 'date'
require 'time'
def update_wu
open("http://api.wunderground.com/api/.......12.json") {|wu|
json_string = wu.read
upd_str = ....
...
wu.close
return upd_str
}
return "NULL"
end
loop do
upd_str = update_wu
# every 5 minutes
t = Time.now
secs = (t.hour * 60 + t.min) * 60 + t.sec
wait = ((secs/(5*60)).to_i + 1) * 5 * 60 - secs
print "#{Time.now.inspect} #{upd_str} #{wait}\n"
sleep(wait)
end
ここでエラーです:
wu.rb:12:in `block in update_wu': undefined method `[]' for nil:NilClass (NoMethodError)
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:155:in `open_uri'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:717:in `open'
from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:35:in `open'
from wu.rb:8:in `update_wu'
プログラムは5分ごとにループして、URIの呼び出しを行います。それはエラーが発生する前に数十回ループします。
どうしたのですか?
ようこそスタックオーバーフロー。 「[mcve]」をお読みください。あなたがコードの一部を削除して構文エラーを引き起こし、あなたの質問をトピックから外すので、あなたのコードは実行されません。それをしないでください。コードを実行して問題を再現できるようにする必要があります。私たちがそれを再現できないなら、あなたを助けることはできません。 –
あなたの「スリープ」メカニズムは不必要に複雑です。 'Time.now.to_i'は秒を返します。 '%'はモジュラを実行します。 'sleep 300 - (Time.now.to_i%300)'は5分ごとに目覚めます。 –
"wu.rb:12"は、問題が12行目に表示されることを示します。この行は表示されません。 –