python函数中的UnboundLocalError替换为NameError吗?

时间:2020-07-13 01:55:25

标签: python python-3.x function nameerror

基本上,我收到了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 个答案:

答案 0 :(得分:1)

如果conditionFalse,则它不会运行if condition,并且不会创建变量pw_is_long = ...,但您需要在while not pw_is_long中使用它

我看到两种可能性:

首先:首先使用一些默认值创建pw_is_long-即。 NoneFlase0

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)
            
相关问题