簡體   English   中英

python - UnboundLocalError:分配前引用的局部變量

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

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