локальная переменная X указана перед присваиванием - PullRequest
0 голосов
/ 27 мая 2018

Я пытался использовать приведенную ниже функцию для подключения к 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', на которую ссылаются до назначения Это потому, что ятакже следует присвоить значение переменной jira, кроме JIRAError?Потому что, если я перейду и попробую, кроме как только удар, он будет работать нормально:

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

1 Ответ

0 голосов
/ 27 мая 2018

Вы можете добиться желаемого поведения, включив возвращение в блок try:

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 не будет назначена в точке возврата.

В противном случае вы можете назначить, например, 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() в блок exc за пределами оператора if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...