gpt4 book ai didi

python - Python 中的 NameError - 不确定是类还是函数导致了错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:42 24 4
gpt4 key购买 nike

我有一个描述简历的文本文件,其中每一行如下所示:

name university sex filename

所以一行会说类似的话

John Texas M resume1.doc

该文件具有标准格式并且不包含任何错误。有四个可能的名字和四个可能的大学,随机创建 64 份简历。我正在尝试编写一个程序来读取文本文件,创建一个具有姓名、大学、性别和文件名属性的简历对象,并将这些对象添加到简历对象列表中。我在 C++ 方面有很多经验,但这是我的第一个 Python 程序,我被一个错误抛弃了:

File "mycode.py", line 142, in <module>
resumes()
File "mycode.py", line 65, in resumes
r = resume(name,uni,sex,filename)
NameError: global name "name" is not defined

我的代码如下:

class resume:
def __init__(self, name, uni, sex, filename)
self.name = name
self.uni = uni
self.sex = sex
self.filename = filename

mylist[]

def resumes():
f = open("resumes.txt",'r')
for line in f:
for word in line.split():
if word == ("John" or "Fred" or "Jim" or "Michael"):
name = word
elif word == ("Texas" or "Georgia" or "Florida" or "Montana"):
uni = word
elif word == "M":
sex = word
elif re.match(r'\w\.doc',word):
filename = word
r = resume(name,uni,sex,filename)
mylist.insert(r)

我不确定错误是在类中还是在函数中。我的计算机没有显示任何语法错误,但我是新手,所以如果有,请随时告诉我如何修复它们。

我已经尝试在“for word in line.split()”循环之外定义名称、uni 等,但程序仍然存在“r = resume(name,uni,sex,filename)”这一行的问题“所以我不确定问题是什么。我已经阅读了有关 NameError 的其他答案,但我是 Python 的新手,无法找出我的代码中的等效问题。

最佳答案

NameError 是在文本文件中找不到任何值的情况下由 undefined variable 引起的。在您尝试将文本文件中的值分配给它们之前,函数中定义它们:

def resumes():
f = open("resumes.txt",'r')
for line in f:
name = ""
uni = ""
sex = ""
filename = ""
for word in line.split():
...

如果愿意,您还可以使用关键字参数在类初始化中预定义变量(但这不是 NameError 的原因):

class resume:
def __init__(self, name="", uni="", sex="", filename="")
self.name = name
self.uni = uni
self.sex = sex
self.filename = filename

在 Python 中定义列表是通过键入 mylist = [] 而不是 mylist[] 来完成的。此外,目前,该列表将在全局命名空间中定义,这通常是不鼓励的。相反,您可以让 resumes 返回一个列表并将此值分配给 mylist:

def resumes():
resume_list = []
f = open("resumes.txt",'r')
for line in f:
for word in line.split():
if word == ("John" or "Fred" or "Jim" or "Michael"):
name = word
elif word == ("Texas" or "Georgia" or "Florida" or "Montana"):
uni = word
elif word == "M":
sex = word
elif re.match(r'\w\.doc',word):
filename = word
r = resume(name,uni,sex,filename)
resume_list.insert(r)
return resume_list

然后您可以在代码中的任何位置执行以下操作:

mylist = resumes()

打开文件后记得关闭文件;在您的情况下,在处理完所有行后调用 f.close() 。更好的是,让 python 通过使用上下文管理器 with 自动管理它,这样您就不必调用 f.close():

def resumes():
with open("resumes.txt",'r') as f:
for line in f:
...

通常,在处理列表时,您会使用append 而不是insertinsert 有两个参数(位置/索引和要插入的元素)所以 mylist.insert(r) 应该引发一个 TypeError: insert() takes exactly 2参数(给定 1 个)。相反,执行 mylist.append(r) 以在列表中的最后一个元素之后插入 r

正如 johnrsharpe 在评论中指出的那样,您的单词比较可能没有达到您的预期。看这个例子:

>>> word = "John"
>>> word == ("John" or "Fred" or "Jim" or "Michael")
True
>>> word = "Fred"
>>> word == ("John" or "Fred" or "Jim" or "Michael")
False
>>>

相反,使用 tupleset 和关键字 in 来检查 word 是否等于任何四个名字:

>>> word = "John"
>>> word in {"John", "Fred", "Jim", "Michael"}
True
>>> word = "Fred"
>>> word in {"John", "Fred", "Jim", "Michael"}
True
>>>
>>> type({"John", "Fred", "Jim", "Michael"})
<type 'set'>
>>>

最后,作为Daniel pointed out ,记住冒号,:,在函数定义之后,例如 def __init__(...)

关于python - Python 中的 NameError - 不确定是类还是函数导致了错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37491389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com