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

Python 使用两个函数时出现“NameError:未定义名称”,python,filenames,openpyxl,Python,Filenames,Openpyxl,我使用一个函数创建用户名,另一个函数创建密码。第二个函数没有运行,因为它告诉我NameError:name'list_two'没有定义。这是我的密码: import random import openpyxl path = "E:\\Desktop\\" wb = openpyxl.load_workbook('excel.xlsx') sheet = wb.active def name_generator(): usernames = list() for usern

我使用一个函数创建用户名,另一个函数创建密码。第二个函数没有运行,因为它告诉我NameError:name'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,但它给出了相同的错误,因此我猜测代码在某种程度上是错误的。

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

此外,建议不要将列表用作变量名

例如:

列表中的列表=名称\生成器。最好使用更具描述性的变量名,当您需要回顾代码时,或者如果其他人需要阅读您的代码时,您会感谢自己


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

您可以使用list\u two=password\u生成器,但该函数的第一行是passwords=list\u two,但此时尚未定义list\u two-它只有在函数完成后才有一个值。此外,它可能是一个列表,因此不可调用。您可能希望将其初始化为空列表,例如,使用passwords=[]或passwords=list,就像您在name_generator中所做的那样。

由于其他答案已经考虑了名称错误发生的原因,此答案仅用于澄清第一个函数和第二个函数之间的差异,如本问题所述:

为什么它与第一个函数一起工作,而与第二个函数不一起工作


这是完整的错误消息:回溯上一次调用:文件E:\Desktopy,第47行,在list\u two=password\u generator文件E:\Desktop\y,第32行,在password\u generator passwords=list\u two name中错误:名称“list\u two”未定义您没有定义函数“list\u two”。您只需使用“list\u two=password\u generator”调用函数“password\u generator”,并在此处指定其返回值。您的意思是“passwords=[]”吗?列表在python中不是保留关键字。请参见此问题:。请编辑您的答案,以免误导其他读者。谢谢!没有意识到列表已经是一个内置函数了!请不要一次又一次地发布同一个问题,最好根据您收到的反馈更新问题。
#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