提高文件的eoferror

时间:2009-12-09 19:06:22

标签: python file 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

当我打电话给syn2(文件名)时:

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

4 个答案:

答案 0 :(得分:1)

在程序预期之前,您正在运行文件“EOF”的末尾。

答案 1 :(得分: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)

答案 2 :(得分:1)

您收到错误global name 'names' is not defined,因为您已在names内声明def entoles(),并且只能在此范围内看到。

如果您希望能够访问names,则必须在dev entoles()之外声明{。}}。

另外

x=names.append(name)
f.write(str(x))

append是一种附加传递给列表的项目的方法。该方法返回'None' 因此,f.write(str(x))将写入“无”。

编辑: Python doc about Input/Output表示f.read(),this Python doc表示输入/ raw_input

答案 3 :(得分:0)

问题是myfunc函数在每次迭代时重新打开文件,删除其内容。您应该将open调用移至while循环之前。