【问题标题】:"NameError: name '' is not defined" when using two functions使用两个函数时出现“NameError: name '' is not defined”
【发布时间】:2019-05-04 15:28:13
【问题描述】:

我正在使用一个函数来创建用户名和另一个函数来创建密码。第二个函数没有运行,因为它告诉我“NameError: name 'list_two' is not defined”。这是我的代码:

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,但它给了我同样的错误,所以我猜测代码在某种程度上是错误的。

【问题讨论】:

  • 请不要一次又一次地发布相同的问题,最好根据收到的反馈更新问题。

标签: python filenames openpyxl


【解决方案1】:

您使用list_two = password_generator(),但该函数的第一行是passwords = list_two(),但此时尚未定义list_two——它只有在函数完成后才会有一个值。此外,它可能是一个列表,因此不可调用。您可能想将其初始化为一个空列表,例如使用passwords = []passwords = list(),就像你在name_generator 中所做的那样。

【讨论】:

  • 谢谢!没有意识到 list 已经是一个内置函数了!
【解决方案2】:

由于其他答案已经解决了名称错误发生的原因,因此此答案仅用于澄清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

【讨论】:

    【解决方案3】:

    它给你的完整错误信息是什么?

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

    例如:

    listlist = name_generator()。最好使用描述性更强的变量名,当您需要回顾您的代码或其他人需要阅读您的代码时,您会感谢自己。

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

    【讨论】:

    • 这是完整的错误消息:Traceback(最近一次调用最后一次):文件“E:\Desktopy”,第 47 行,在 list_two = password_generator() 文件“E:\Desktop\ y",第 32 行,在 password_generator 密码 = list_two() NameError: name 'list_two' is not defined
    • 您没有在任何地方定义函数“list_two()”。您只是使用 'list_two = password_generator()' 调用函数 'password_generator()' 并在此处分配它的返回值。您的意思是“密码 = []”吗?
    • list 不是 python 中的保留关键字。请参阅这个 SO 问题:stackoverflow.com/questions/14694559/…。请编辑您的答案,以免误导其他读者。
    猜你喜欢
    • 1970-01-01
    • 2022-12-02
    • 2015-11-11
    • 2012-05-22
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 2020-11-07
    相关资源
    最近更新 更多