方法
def exp_backoff up_to, url, header = {}
tries = 0
begin
tries += 1
response = JSON.parse(open(url, header).read)
return response
rescue OpenURI::HTTPError => e
if tries < up_to
sleep( 2 ** tries )
retry
else
return e
end
end
end
我正在调用exp_backoff
期待返回响应,但它不是
exp_backoff 2, status_url
session_token = response['session_token']
获取此错误
undefined local variable or method `response' for main:Object (NameError)
答案 0 :(得分:1)
您没有将返回值分配给任何内容。这将有效:
response = exp_backoff 2, status_url
session_token = response['session_token']
但请注意,您的rescue
部分将返回不同的对象,而response['session_token']
将引发未定义的方法错误。也许你应该重新考虑一下你的方法?最有可能的是,您应该简单地重新加载异常对象,而不是返回异常对象:
rescue OpenURI::HTTPError
if tries < up_to
sleep( 2 ** tries )
retry
else
raise
end
答案 1 :(得分:0)
您在方法response
中定义的局部变量exp_backoff
只能在exp_backoff
的方法体中访问。您无法从该方法定义之外访问它。
当您将某个值分配给方法中的局部变量并返回该值时,变量赋值对方法外部没有影响。