2014-11-21 67 views
-4

我正在为函数编写单元测试。 该函数完全适用于它自己,但是当我试图通过单元测试来测试这个函数时,它给了我一个unbondlocalerror。 我已经rev_get_event定义为一个全局变量python - UnboundLocalError:在赋值之前引用的局部变量

#return value for get event 
global rev_get_event 

def Get_event(username, password, eventID): 
try: 
    payload = {'username': username, 'password': password} 
    s = requests.Session() 
    r = s.get("https://www.regonline.com/api/default.asmx/Login", params=payload) 
    login_info = minidom.parseString(r.text) 
except requests.exceptions.RequestException: 
    logger.exception("Requests error") 
    api = login_info.getElementsByTagName('APIToken') 
    for api_token in api: 
     api_token = api_token.firstChild.nodeValue 
    payload2 = {'eventID' : eventID, "apiToken" : api_token } 
    rev_get_event = requests.get('https://www.regonline.com/api/default.asmx/GetEvent', params=payload2) 
except requests.exceptions.RequestException: 
    logger.exception("Requests error") 
return rev_get_event 

和我的单元测试是:

def test_get_event_good(self): 
    result = rg.Get_event("eddietest", "eddietest", 18283) 
    get_event = minidom.parseString(result) 
    print result 
    success = get_event.getElementsByTagName('Success') 
    for answer in success: 
     answer = answer.firstChild.nodeValue 
    self.assertEqual(answer, "true", "connetion failed") 

,这让我:

UnboundLocalError: local variable 'rev_get_event' referenced before assignment 
+1

'rev_get_event'只在'except'块中定义,如果'try'成功,则该变量永远不会被定义。 – CoryKramer 2014-11-21 19:30:12

+0

我把它定义为一个全局变量“global rev_get_event” – jifferent 2014-11-21 19:34:51

回答

0

你是返回是只声明的变量如果进入流程:

except requests.exceptions.RequestException: 

我想,当你在单元测试中不使用它时,你总是接受这个流程,但是在单元测试中你不用,这正是单元测试的目的,为了找到这些类型的错误!

相关问题