[英]The response “er ?” is getting intermittently for Ruby http request
我正在使用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
由于我是红宝石的新手,所以不知道为什么反应如此。 一旦我下次运行脚本时正确获得响应,就可以了吗? 是回应。 请有人帮忙解决此问题。
开始救援块在这里非常大,您将丢失异常详细信息,包括行号。
实际上,在某个时候发生的事情是您正在对一个nil的对象调用[],但它失败了。 哪一点 没有堆栈跟踪或较小的块,您将看不到。
正如@Stefan所提到的,请不要捕获异常,如果您不确定会得到什么,请将其保留为空白,ruby将为您做最好的事情,并抓住异常痕迹的正确部分,这只会使生活变得艰难,请参见: 为什么在Ruby中使用`rescue Exception => 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.