文件引发EOFError
import pickle
filename=input('Enter a file name:')
def commands():
f=open(filename,'w')
names=[]
grades=[]
while True:
name=input("Give a student's name:")
if name.lower()=='end':
f.close()
print("File closed")
print("Back to Menu")
break
else:
x=names.append(name)
f.write(str(x))
grade=input("Give student's grade:")
try:
grade=float(grade)
if 0<=grade<=10:
y=grades.append(grade)
f.write(str(y))
else:
print("Please give a grade!Between 0-10! ")
except ValueError:
print(grade,"is not a number...Give only Numbers!")
def syn2(filename):
try:
f=open(filename,'r')
f.read(names)
f.read(grades)
d1={}
d1[names]=grades
print(d1)
print("Back to Menu")
except IOError:
return False
Traceback (most recent call last): File "file1.py", line 68, in File "file2.py", line 45, in syn2 NameError: global name 'names' is not defined
当我调用 syn2(filename) 的时候:
4 个回答
1
你的程序在意料之外的地方遇到了文件的结束标志,叫做“EOF”。
1
我建议把学生和成绩放在一个字典里。这样,如果用户输入完毕,就可以用 pickle
把这个字典保存到一个文件里。就像下面这样:
grades = {}
while True:
# ask for student's name n
# ...
if n.lower() == 'end':
break
# ask for student's grade g
# ...
grades[n] = g
pickle.dump(grades, yourfile)
1
你遇到的错误 global name 'names' is not defined
是因为你在 def entoles()
这个函数里面定义了 names
,所以它只能在这个函数内部被看到。
如果你想在函数外部也能使用 names
,你需要把它放在 def entoles()
之外来定义。
另外,
x=names.append(name)
f.write(str(x))
append 是一个方法,它可以把你传入的项目直接加到列表里。这个方法返回的是 'None',所以 f.write(str(x))
会写入 'None'。
编辑:你可以查看这个 Python文档,了解关于输入/输出的内容,还有这个 Python文档,了解 input/raw_input 的用法。