簡體   English   中英

從開始搶救錯誤返回變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM