使用两个函数时出现“ NameError:未定义名称”

时间:2019-05-04 15:28:14

标签: python filenames openpyxl

我正在使用一个函数来创建用户名,并使用另一个函数来创建密码。第二个函数未运行,因为它告诉我“ NameError:未定义名称'list_two'”。这是我的代码:

import random
import openpyxl

path = "E:\\Desktop\\"

wb = openpyxl.load_workbook('excel.xlsx')
sheet = wb.active

def name_generator():
    usernames = list()
    for username in range (0, 34):
        color = ["Red", "Green", "Blue", "White", "Black", "Yellow", "Purple", "Orange", "Pink"]
        animal = ["Cat", "Dog", "Snake", "Mouse", "Tiger", "Leopard", "Moose", "Wolf", "Bear"]
        number = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
                  "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"]

        randomColor = random.randrange(0, len(color))
        randomAnimal = random.randrange(0, len(animal))
        randomNumber = random.randrange(0, len(number))

        username = "Username: " + color[randomColor] + animal[randomAnimal] + number[randomNumber]
        usernames.append(username)
    return usernames

list = name_generator()

for i in range(1,34):
    cellref = sheet.cell(row=i, column=5)
    cellref.value=list[i]

def password_generator():
    passwords = list_two()
    for password in range (0, 34):
        color = ["Red", "Green", "Blue", "White", "Black", "Yellow", "Purple", "Orange", "Pink"]
        animal = ["Cat", "Dog", "Snake", "Mouse", "Tiger", "Leopard", "Moose", "Wolf", "Bear"]
        number = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
                  "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"]

        randomColor = random.randrange(0, len(color))
        randomAnimal = random.randrange(0, len(animal))
        randomNumber = random.randrange(0, len(number))

        password = "Password: " + color[randomColor] + animal[randomAnimal] + number[randomNumber]
        passwords.append(password)
    return passwords

list_two = password_generator()

for i in range(1,34):
    cellref = sheet.cell(row=i, column=6)
    cellref.value=list_two[i]

wb.save('excel_mod.xlsx')
input("Done")

我不确定是什么问题。为什么它不能与第一个功能一起使用?我尝试了不同的shell,但是它给了我相同的错误,因此我猜代码在某种程度上是错误的。

3 个答案:

答案 0 :(得分:1)

您执行了list_two = password_generator(),但是该函数的第一行是passwords = list_two(),但此时list_two尚未定义-它只会在功能已完成。同样,它也可能是一个列表,因此不可调用。您可能想将其初始化为一个空列表,例如像在passwords = []中一样使用passwords = list()name_generator

答案 1 :(得分:0)

它给您的完整错误消息是什么?

此外,建议不要使用list作为变量名。

例如:

listlist = name_generator()中。最好使用更具描述性的变量名,当您需要回顾代码或其他人需要阅读您的代码时,您将感激不尽。

此外,只需使用usernames = []创建一个空列表类型。

答案 2 :(得分:0)

由于其他答案已经解决了发生名称错误的原因,因此,该答案仅用于阐明first函数和second函数之间的区别,如下所示:

  

为什么它不能与第一个功能一起使用?

#first function
def name_generator():
    usernames = list()             #<--- makes a list
    ...
    ...
    return usernames
list = name_generator()            #<--- assigns to a variable NAMED list
#second function
def password_generator():
    passwords  = list_two()        #<--- ERROR: list_two is not defined as a function prior to this line
    ...
    ...
    return passwords
list_two = password_generator()    #<--- assigns to a variable NAMED list_two