[英]Return a variable from a begin rescue error
方法
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)
您沒有將返回值分配給任何東西。 這將起作用:
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
您在exp_backoff
方法中定義的局部變量response
只能在exp_backoff
的方法體內exp_backoff
。 您不能從該方法定義之外訪問它。
當您向方法內的局部變量賦值並返回該值時,變量賦值對方法外部無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.