EOFError в pickle.load и ошибка файла не найдена

elif(ch==2):
    fh=open("emp1.txt","rb+")
    fo=open("temp.txt","wb+")
    ecode=input("Enter the Ecode :")
    rec=(" ")
    try:
        while True:
            emp1= pickle.load(fh)
            if (emp1.ecode!=ecode):
                pickle.dump(emp1,fh)

    except(EOFError):
        fh.close()
        fo.close()
        os.remove("empl.txt")
        os.rename("temp.txt","emp1.txt")
        print("")

выполнение следующего кода дает мне эту ошибку:

Трассировка (последний последний вызов): файл «C:\Users\hello\Desktop\bhavi\pythonprogramming\Employ.py», строка 78, в emp1= pickle.load(fh) EOFError

Во время обработки вышеупомянутого исключения произошло другое исключение:

Трассировка (последний последний вызов): файл «C:\Users\hello\Desktop\bhavi\pythonprogramming\Employ.py», строка 85, в os.remove («empl.txt») FileNotFoundError: [WinError 2] система не может найти указанный файл: «empl.txt»

Что мне теперь делать??


person bhavishya pawar    schedule 29.11.2017    source источник


Ответы (2)


Вы должны исправить свой путь. В первом случае вы пишете "emp1.txt"; а во втором вы пишете "empl.txt". Если вы посмотрите внимательно, то заметите, что в этих двух строках есть разница.

Подсказка: '1' != 'l'

Ваш код, вероятно, также может быть реорганизован. Хотя другие не могут протестировать ваш код, поскольку он очень неполный, следующий код должен работать вместо него. Вам все равно нужно будет убедиться, что он работает.

elif ch == 2:
    with open('emp1.txt', 'rb+') as fh, open('temp.txt', 'wb+') as fo:
        ecode = input('Enter the Ecode: ')
        while True:
            try:
                item = pickle.load(fh)
            except EOFError:
                break
            else:
                if item.ecode != ecode:
                    pickle.dump(item, fo)
    os.remove(fh.name)
    os.rename(fo.name, fh.name)
    print()
person Noctis Skytower    schedule 29.11.2017

Я бы использовал полку, ее намного проще использовать, и, по моему опыту, она не выдает много ошибок. полка построена на рассоле, но она просто упрощает ее.

вот краткое руководство

http://python.wikia.com/wiki/Shelve

person Community    schedule 30.11.2017