赋值前引用的局部变量 X

local variable X referenced before assignment

我已尝试使用以下功能连接到 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 变量赋值吗?因为如果我移动 try 和 except jut put as blow,它工作正常:

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

您可以通过在 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()

否则如果遇到异常,局部变量jira不会在return处赋值。

否则,您可以在 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

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