python中的“Pickle”会在我的代码中引发错误:

时间:2014-07-25 22:35:40

标签: python python-2.7 pickle eof

我是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

1 个答案:

答案 0 :(得分:0)

如果没有看到显示问题或错误的实际代码,或者您如何使用它,那么很难说清楚...

第一次运行程序时,PhoneBook.txt中没有任何内容。 openpickle.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:开始,提出一系列测试用例,看看每个测试用例的内容,并确定哪些应该使程序失败,哪些应该从头开始处理。