[Tutor] Little pickle playing up on me

adam adam at monkeez.org
Fri Jul 9 11:36:10 CEST 2004


I've got two functions (see below) which load pickled objects in to memory
- one (loadcollection) which worked by querying the user for a string to
provide a file name and unpickling it. The second function
(load_existing_function) takes a command line argument, which has been
tested for and turned into a string.

I'm getting the error:

Traceback (most recent call last):
  File "D:\cygwin\home\rdgac2\cvs\newmag\newmag.py", line 505, in ?
    mainmenu() # Kicks the whole thing off
  File "D:\cygwin\home\rdgac2\cvs\newmag\newmag.py", line 468, in mainmenu
    load_existing_collection(filepassed)
  File "D:\cygwin\home\rdgac2\cvs\newmag\newmag.py", line 450, in
load_existing_collection
    instance = pickle.load(openfile)
  File "C:\Python23\lib\pickle.py", line 1390, in load
    return Unpickler(file).load()
  File "C:\Python23\lib\pickle.py", line 872, in load
    dispatch[key](self)
KeyError: '#'

Any ideas?

Thanks
adam

429 def loadcollection():
430     """This function will load a file which is a cpickled object of a-
431     magazine collection.-
432     """
433     filename = raw_input("What is the filename?")
434     try:
435
436         file = open (filename, 'r')
437     except IOError:
438         print "That file was not found!"-
439         loadcollection()
440     instance = pickle.load(file)
441     #instance.collectionmenu() This used to take you to the instances
menu
442     # but now we are going to a new edit/search menu--
443     edit_or_search(instance)
444
445 def load_existing_collection(file):
446 >---print type (file)
447 >---print file
448 >---try:
449 >--->---openfile = open(file, 'r')
450 >--->---instance = pickle.load(openfile)
451 >--->---edit_or_search(instance)
452 >---except IOError:
453 >--->---print "That file doesn't exist, please try again"
454 >--->---loadcollection()
455 >---#instance = pickle.load(openfile)
456 >---#edit_or_search(instance)


459 def mainmenu():
460 >---"""This method is the main entry point method that the user will
first see.
461 >---It asks them whether they want to create a new collection, or load-
462 >---an existing one
463 >---"""
464
465 >---if sys.argv:
466 >--->---filepassed = str(sys.argv[0])
467 >---
468 >--->---load_existing_collection(filepassed)
469
470 >---else:
471 >--->---print '''
472 >--->---###################################
473 >--->---#  Main Menu                      #
474 >--->---###################################
475
476
477 >--->---What would you like to do?- ...
...




More information about the Tutor mailing list