Поднятие 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 (последний вызов был последним):
  Файл "file1.py", строка 68, в 
  Файл "file2.py", строка 45, в syn2
NameError: глобальное имя 'names' не определено

4 ответа

Я бы посоветовал хранить учеников / оценки в словаре. Если пользователь закончил свой ввод, 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)

Вы бежите в конец файла "EOF", прежде чем ваша программа ожидает.

У вас есть ошибка global name 'names' is not defined потому что вы объявили names в def entoles() и видно только в этом объеме.

Вы должны объявить names вне dev entoles() если вы хотите иметь возможность получить к нему доступ.

Также

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

append - это метод, который добавляет элемент, переданный в список, на месте. Метод возвращает "Нет". Следовательно, f.write(str(x)) напишет "Нет".

РЕДАКТИРОВАТЬ: документ Python для ввода / вывода для f.read() и этот документ Python для ввода /raw_input

Проблема в том, что myfunc Функция открывает файл на каждой итерации, удаляя его содержимое. Вы должны переместить open вызов до цикла while.

Другие вопросы по тегам