我是python的新手,我正在尝试通过codecademy的us来教我自己如何在python中编程。但在我自己的时间里,我决定尝试使用词典和我在这个论坛上读到的泡菜功能编写电话簿。但是在尝试使用pickle保存我的电话簿本身的字典时,代码不断提出“EOFError”我不知道这是什么或如何解决它。所以,如果有人能够帮助我,我会非常感激
#My Code
import pickle
PhoneBook = {}
reloaded = {}
with open("C:\\Programming\\Phone Book.txt", "rb") as inf: #Modify this dependent on where the file is located
reloaded = pickle.load(inf)
def help():
print "add_contact('name', 'number') - Adds a new contact to your phone book."
print "display_phone_book() - Displays the contents of your phone book."
print "display_contact('name') - Displays the resident of your phone book with the corrosponding name."
def add_contact(name, number):
PhoneBook [name] = number
with open("C:\\Programming\\Phone Book.txt", "wb") as outf: #Modify this dependent on where the file is located
pikle.dump(PhoneBook, outf)
def display_phone_book():
print PhoneBook
def display_contact(name):
print "%s's phone number is:" %(name)
print PhoneBook[name]
#Error's Code:
def load_eof(self):
raise EOFError
dispatch[''] = load_eof
答案 0 :(得分:0)
如果没有看到显示问题或错误的实际代码,或者您如何使用它,那么很难说清楚...
第一次运行程序时,PhoneBook.txt
中没有任何内容。 open
或pickle.load
将失败。而且由于你甚至无法超越第一次运行程序的前几行,所以问题永远无法解决;你永远都会遇到同样的失败。
如果那是你的问题,你可能想要这样的东西:
try:
with open("C:\\Programming\\Phone Book.txt", "rb") as inf:
reloaded = pickle.load(inf)
except (IOError, EOFError) as e:
print('Failed to find old data ({!r}), creating new'.format(e))
reloaded = {}
您可能希望限制自动处理的案例(例如,在IOError上,如果它是EACCES
而不是ENOENT
,请不要只是忽略错误并继续前进)或者展开它们(例如,如果文件不是空的,但是已损坏,则可能会得到KeyError
而不是EOFError
。如果您不确定自己想要什么,最好从except Exception as e:
开始,提出一系列测试用例,看看每个测试用例的内容,并确定哪些应该使程序失败,哪些应该从头开始处理。