![](/img/trans.png)
[英]UnBoundLocalError: local variable referenced before assignment (Python)
[英]python - UnboundLocalError: local variable referenced before assignment
我正在為一個函數編寫單元測試。 該函數在其自身上完美運行,但是當我嘗試通過單元測試來測試該函數時,它給了我一個 unbondlocalerror。 我將 rev_get_event 定義為全局變量
#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
您正在返回一個變量,該變量僅在您進入以下流程時才聲明:
except requests.exceptions.RequestException:
我猜當你不在單元測試中使用它時,你總是進入這個流程,但在單元測試中你沒有,這正是單元測試的原因,為了找到這些類型的錯誤!
這里的問題似乎是變量范圍。
在函數中,變量rev_get_event是函數作用域的局部變量。 如果你的意思是全局變量,函數應該顯式聲明它,例如如下:
global rev_get_event
def Get_event(username, password, eventID):
global rev_get_event
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
注意函數的第一行:
global rev_get_event
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.