python中的"Pickle"在我的代码中引发错误:



我是python的新手,我正试图通过codecademy的网站自学如何用python编程。但是在我自己的时间里,我决定尝试使用字典和pickle函数来编写一个电话簿,我在这个论坛上读到过。但在尝试用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

如果没有看到演示问题或错误的实际代码,或者您如何使用它,很难判断,但是…

第一次运行程序时,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:开始,想出一堆测试用例,看看你得到了什么,并决定哪些应该使程序失败,哪些应该从头开始处理。

相关内容

最新更新