我正在使用open-uri方法运行http请求。以下错误消息间歇性地获取而不是预期的输出。
发生 NoMethodError 类型的错误,消息是 nil:NilClass 的未定义方法 '[]'
的?
我的代码如下,
request_uri = "my url here"
request_query = ''
url = "#{request_uri}#{request_query}"
begin
buffer = open(request_uri,
'app-key' => ENV['API_KEY'],
'app-token' => ENV['API_TOKEN'],
'trail-Token' => ENV['TRAIL_TOKEN']).read
parsed = JSON.parse(buffer)
events = parsed['events']
event = Array(events).last
message = event['message']
otp = message[-5,4]
print "otp", otp
rescue Exception => ex
puts "An error of type #{ex.class} happened, message is #{ex.message}"
retry
end
puts "otp returned", otp
因为我是 ruby 的新手,不知道为什么反应会变成这样。一旦我下次运行脚本时正确获得响应 er ? 是响应。有人请伸出援助之手来解决问题。
这里的开始救援块非常大,您正在丢失异常详细信息,包括行号。
实际上,在某些时候,正在发生的事情是您在一个为 nil 的对象上调用 [],并且它失败了。哪一点?如果没有堆栈跟踪或较小的块,您将无法看到。
正如@Stefan提到的,请不要抓住异常,如果你不确定你会得到什么,把它留空,Ruby 会为你做最好的事情并抓住异常跟踪的正确部分,它只会让生活变得艰难,看看:为什么在 Ruby 中"拯救异常 => e"是一种糟糕的风格?
如果您想查看导致异常的确切行,我也肯定会限制重试。
begin
retries ||= 0
...
rescue => ex
puts "An error of type #{ex.class} happened, message is #{ex.message}"
puts ex.backtrace
retry if (retries += 1) < 3
end