python - 赋值前引用的局部变量 X

标签 python variables reference jira

我尝试使用以下函数连接到 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

最佳答案

您可以通过在 try block 中包含 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 在返回时不会被赋值。

否则,您可以在 except block 中分配,例如 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 返回,并且脚本中稍后的代码依赖于在有效的连接上。根据这一点,您可能需要将 exit() 调用放在 if 语句外部的 except block 中。

关于python - 赋值前引用的局部变量 X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50554492/

相关文章:

python - 根据Python3中的值传递可选参数

javascript - 在 JavaScript 中使用全局变量

python - 模块未找到错误 : No module named 'gi'

python - 使用 python 编程时在迭代时修改列表

javascript - 用javascript发布计算产品

Java 方法重写 - 访问父类中的方法 - 这可能吗?

reference - Latex:在同一位置引用两个同名作者的引用文献时如何避免省略作者姓名

c++ - 为什么我可以为引用分配新值,以及如何使引用引用其他内容?

python - 如何让这个运行 'faster'?或者这是正确的术语吗?

javascript - 在不创建额外变量的情况下设置和返回变量值