UnboundLocalError внутри функции python заменена на NameError? - PullRequest
0 голосов
/ 13 июля 2020

В основном я получал UnboundLocalError: local variable 'pw_is_long' referenced before assignment и видел, что использование ключевого слова global помогает избавиться от этого внутри функции. После его использования я получаю NameError: name 'pw_is_long' is not defined

Я работаю в селене и на сайте Instagram. Этот код работал до того, как я поместил его в функцию.

Моя первая функция:

password = input("Password\n")  
def pw_minimum_length(pw):
        if len(pw) > 5:
            return(True)
        else:
            return(False)
        
pw_is_long = pw_minimum_length(password)

Моя вторая и основная функция:

def login(username, password):
    #some if-else code
    #selenium element selecting & clicking
    #the following is the heirarchy inside the function where I am having this issue
    while (condition):
        if (condition):
            password = input("Password\n")
            global pw_is_long #when this line was not here, I was getting UnboundLocalError
            pw_is_long = pw_minimum_length(password)
        while not(pw_is_long): #line throwing NameError
            print("Password length must be at least 6 characters")
            password = input("Password\n")
            pw_is_long = pw_minimum_length(password)
        

Любые ответы полезны. Заранее спасибо.

1 Ответ

1 голос
/ 13 июля 2020

Если condition равно False, тогда он не запускается if condition и не создает переменную pw_is_long = ..., но вам это нужно в while not pw_is_long

Я вижу две возможности:

Сначала: создайте pw_is_long в начале с некоторым значением по умолчанию - ie. None или Flase или 0

def login(username, password):

    pw_is_long = False

    while condition:
        if condition:
            password = input("Password\n")
            pw_is_long = pw_minimum_length(password)
            
        while not pw_is_long:
            print("Password length must be at least 6 characters")
            password = input("Password\n")
            pw_is_long = pw_minimum_length(password)
        

Второе: возможно, вам лучше вложить его и запустить while внутри if

def login(username, password):

    while condition:
        if condition:
            password = input("Password\n")
            pw_is_long = pw_minimum_length(password)
            
            while not pw_is_long:
                print("Password length must be at least 6 characters")
                password = input("Password\n")
                pw_is_long = pw_minimum_length(password)
            
...