2016-05-01 108 views
0

我試圖使用全局,但它給我Global NameError Not Defined。 它失敗的錯誤: UnboundLocalError:局部變量「full_url」如果你ENV不是stagingprod一個,這將失敗,因爲full_url不會當打印執行組分配NameError:全局名稱'full_url'未定義

env = sys.argv[1] 
class Account: 
    def __init__(self): 

     self.stag_url  = 'http:url_1' 
     self.prod_url  = 'http://url_2' 

     self.account_number = 'XXXXXXX' 
     self.api_url  = "ZZZZZZ" 
     self.headers  = { "Client": "ZZZZ", \ 
            "content-type": "application/json", \ 
            "Accept": "application/json;v=2" } 

     def request_data(self,env): 
     if env == "staging": 
      full_url = self.stag_url + self.account_number + self.api_url 
     if env == "prod": 
      full_url = self.prod_url + self.account_number + self.api_url 

     print("URL: " + full_url + '\n') 

     try: 
      req = requests.get(full_url,headers=self.headers) 
      return req.status_code, req.json() 
     except requests.exceptions.HTTPError as e: 
      print("Got an HTTPError: ", e.message) 

acnt = Account() 

if sys.argv[2] == "response_code": 
    status_code,response_json = acnt.request_data(env) 
    print("Response Code: " + str(status_code)) 
    print('\n' + "Response JSON Body: " + '\n') 
    print(json.dumps(response_json, sort_keys=True, indent=4)) 

if sys.argv[2] == "response_json": 
    status_code,response_json = acnt.request_data(env) 
    print(json.dumps(response_json, sort_keys=True, indent=4)) 
+1

很可能你的變量'env'沒有設置。你也應該修改你的縮進以便你的代碼可讀 – Cfreak

+0

env已經被設置在類本身之上。 –

+0

env的價值是什麼?第一個if(「staging」)和第二個(「prod」)匹配是否有可能在打印時沒有定義「full_url」? – Francesco

回答

0

讓我們嘗試從錯誤消息向後工作。在線

print("URL: " + full_url + '\n') 

full_url是一個局部變量,但還沒有設置。它可以在哪裏設置?那麼,只有在上述行:

if env == "staging": 
    full_url = ..something 
if env == "prod": 
    full_url = ..something 

由此可見,env既不是"staging"也不"prod"。你可以通過修改上面的代碼來確保

if env == "staging": 
    full_url = ..something 
elif env == "prod": 
    full_url = ..something 
else: 
    assert False, 'env must be one of staging, production' 
+0

謝謝@phihag。你是對的。萬分感謝。 –

0

之前引用。將其更改爲if,elif,else:

if env == "staging": 
    full_url = self.stag_url + self.account_number + self.api_url 
elif env == "prod": 
    full_url = self.prod_url + self.account_number + self.api_url 
else: 
    raise Exception("Unsupported ENV") 

此外,可能需要將Account類本身的ENV設置爲實例var。這將避免必須使用全局變量。

+0

OMG !!!!謝謝你@tknickman ..你救了我..我正在通過'stag'而不是'staging' –

+0

樂意幫忙@beginner_world – tknickman

+0

這也是正確的答案。 –

相關問題