using shelve correctly?

Blair Hall b.hall at irl.cri.nz
Wed Dec 10 00:07:39 EST 2003


I am having trouble understanding the correct use of 'shelve'.

I have a number of small programs that read and write to a single
shelve file (not multithreading though).

It seems that by writing to an existing entry I
sometimes corrupt the database. For instance, I get the problem
when a Python script has opened the file and read and written a few 
objects it then tries to overwrite an existing entry:

cf = {}
FILE['correction factor'] = cf
FILE.sync()

The program then closes the file and terminates. Now if I go
back and look at the keys to the data base I find that
'correction factor' is no more and instead there is apparently
'correction factorr' (repetetion of last letter), however is
I try to use that key to access the data I get a KeyError.

I get the same pattern of corrupted key with other entries too (last 
letter repeats).

It appears that by deleteing the entry before hand

del FILE['correction factor']
FILE['correction factor'] = cf

the problem does not occur.
But I didn't think that this should be necessary.

Am I using shelve incorectly?





More information about the Python-list mailing list