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 之上,但它只是简化了它。
这里有一个简短的教程
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 之上,但它只是简化了它。
这里有一个简短的教程