【问题标题】:Error when executing Python code "UnboundLocalError: local variable 'sessionid' referenced before assignment"执行 Python 代码时出错“UnboundLocalError:分配前引用的局部变量‘sessionid’”
【发布时间】:2020-06-12 07:15:48
【问题描述】:

我正在尝试执行 python 套件,但遇到以下错误。

File "botclient.py", line 59, in <module>
botcode.utils.addUser(loginUri, logoutUri1, logoutUri2, addUserUri, dbUri, dataMap)
File "/root/botclient/clcode/utils.py", line 877, in addUser
logout(logoutUri1, sessionid, dataMap)
UnboundLocalError: local variable 'sessionid' referenced before assignment

单独执行该函数时没有看到此错误。 这是我正在使用的 addUser 函数

def addUser(loginUri, logoutUri1, logoutUri2, addUserUri, dbUri, dataMap):
        try:
            response = login(loginUri, dataMap)
            sessionid = response.split("var jsessionid = '")[1].split("'")[0]
            csrftoken = response.split("wap.csrf_token=\"")[1].split("\"")[0]
            configManager = getDBData("select+instanceid+from+XGS_GROUP+where+instancename%3D%27Config+Managers%27", sessionid, csrftoken, dbUri, dataMap)
            nbiWrite = getDBData("select+instanceid+from+XGS_GROUP+where+instancename%3D%27NBI+Write%27", sessionid, csrftoken, dbUri, dataMap)
            rootDomain = getDBData("select+instanceid+from+XGS_GROUP+where+instancename%3D%27ROOT-DOMAIN%27", sessionid, csrftoken, dbUri, dataMap)
            addUserData = '''------WebKitFormBoundarySkroBjW9bHRdh2YW\r\nContent-Disposition''' 
            addUserPost(addUserUri, addUserData, sessionid, csrftoken, dataMap)

        except Exception as err:
             log(str(traceback.format_exc()))
             dataMap["failureReason"] = "Issue in user addition"
        finally:
             logout(logoutUri1, sessionid, dataMap)

sessionid 缺少什么?

【问题讨论】:

  • 这与Linux或vi无关,我删除了那些标签。

标签: python python-2.7 python-requests


【解决方案1】:

请注意 sessionid 是如何仅在“try”语句执行完成时定义的。

当出现异常时,sessionid 保持未定义,在你的“finally”语句中,它会中断。

【讨论】:

    【解决方案2】:

    如果您的 try 块的第一行出现异常,则不会分配 sessionid。因此,当您尝试在 finally 块中访问它时,它会引发错误,因为此时您基本上不存在 sessionid。

    解决此问题的一种方法是将 sessionid 放在 try/except 块之外/之前。这样,你就知道它已经被声明了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2020-01-16
      • 2019-12-05
      相关资源
      最近更新 更多