【问题标题】:local variable X referenced before assignment赋值前引用的局部变量 X
【发布时间】:2018-05-27 17:00:37
【问题描述】:

我尝试使用以下函数连接到 jira,但身份验证错误 401 除外:

def jira_connect(User, Passwd):
try:
    jira = JIRA(basic_auth=(User, Passwd), options={'server': 'https://jira-server-address'})
except JIRAError as e:
    if e.status_code == 401:
        print "Login to JIRA failed. Please check your username and password and try again !"
        exit()
return jira

def main(Thisuser, Thispasswd):
User = Thisuser
Passwd = Thispasswd
jira = jira_connect(User, Passwd)
if __name__== "__main__":
Getuser = getpass.getuser()
Getpasswd = getpass.getpass()
main(Getuser, Getpasswd)

但在那之后我得到了: UnboundLocalError:分配前引用的局部变量“jira” 那是因为我还应该在除了 JIRAError 下给 jira 变量赋值吗?因为如果我移动尝试并且除了作为打击之外,它工作正常:

def jira_connect(User, Passwd):
    jira = JIRA(basic_auth=(User, Passwd), options={'server': 'https://jira-server-address'})
    return jira

【问题讨论】:

    标签: python variables reference jira


    【解决方案1】:

    您可以通过在 try 块中包含 return 来实现所需的行为:

    def jira_connect(User, Passwd):
        try:
            jira = JIRA(basic_auth=(User, Passwd), options={'server': 'https://jira-server-address'})
            return jira
        except JIRAError as e:
            if e.status_code == 401:
                print "Login to JIRA failed. Please check your username and password and try again !"
                exit()
    

    否则,如果遇到异常,则不会在返回点分配本地 var jira

    否则,您可以在 except 块中分配,例如,jira = None

    def jira_connect(User, Passwd):
        try:
            jira = JIRA(basic_auth=(User, Passwd), options={'server': 'https://jira-server-address'})
        except JIRAError as e:
            if e.status_code == 401:
                print "Login to JIRA failed. Please check your username and password and try again !"
                exit()
            jira = None
        return jira
    

    但如果JIRAError 的状态代码与 401 不同导致None 返回,并且脚本中稍后的代码依赖于有效连接,我会对此保持警惕。根据这一点,您可能希望将 exit() 调用放在 if 语句之外的 except 块中。

    【讨论】:

    • 感谢您的回答,但是我尝试了两种方法,但仍然收到以下错误:警告:root:从 GET jira-server.com/rest/api/2/serverInfo 获得可恢复错误,将在 9.50354793356 内重试 [1/3]。 Err: 401 Unauthorized,我认为这与 jira 本身有关,因为在此警告后我无法获得 status_code 401。
    • 是的——看起来未绑定的本地错误已解决。看起来 Jira 正在内部处理身份验证问题,发出警告并在超时后重试,而不是抛出您期望的异常。
    • 再次感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2011-11-06
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多