首页 > 解决方案 > 赋值前引用的局部变量 X

问题描述

我尝试使用以下函数连接到 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: local variable 'jira' referenced before assignment 难道是因为我也应该在除了 JIRAError 下给 jira 变量赋值吗?因为如果我移动尝试并且除了作为打击之外,它工作正常:

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

标签: pythonvariablesreferencejira

解决方案


您可以通过在 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则不会在返回点分配本地 var。

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

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 不同的 a 导致None返回,并且脚本中稍后的代码依赖于有效连接。根据这一点,您可能希望将exit()调用放在 if 语句之外的 except 块中。


推荐阅读