2014-03-06 84 views
0

的方法從開始救援錯誤

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   
+0

謝謝您也收到了NoMethodError。我返回零,因爲它更好地服務於我的目的 – Patrick

0

response你的方法exp_backoff中定義的局部變量只內exp_backoff方法體中是可訪問的。您不能從該方法定義之外訪問它。

當您爲方法中的局部變量賦予某個值並返回該變量時,變量賦值對方法外部沒有任何影響。