pickle.load 中的 EOFError 和文件未找到错误

EOFError in pickle.load and file not found error

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("")

运行 下面的代码给我这个错误:

Traceback (most recent call last): File "C:\Users\hello\Desktop\bhavi\python programming\Employ.py", line 78, in emp1= pickle.load(fh) EOFError

在处理上述异常的过程中,又发生了一个异常:

Traceback (most recent call last): File "C:\Users\hello\Desktop\bhavi\python programming\Employ.py", line 85, in os.remove("empl.txt") FileNotFoundError: [WinError 2] The system cannot find the file specified: 'empl.txt'

我现在该怎么办??

你应该修正你的路径。在第一种情况下,你写 "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()

我会使用搁置,它更易于使用,而且根据我的经验,它不会出现太多错误。 shelve 建立在 pickle 之上,但它只是简化了它。

这里有一个简短的教程

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