2016-05-01 106 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

这也是正确的答案。 –

相关问题