shelve problem

Discussion in 'Python' started by Michael Mulcahy, Mar 2, 2004.

  1. Hi All,

    Problem: Shelve module doesn't like me

    OS: Win2000
    version: 2.3.3

    Here is simple reproduction code and the error that occurs:

    import shelve, anydbm
    try:
    test = shelve.open('hello', 'r') # file hello does not exist
    except:
    pass # this is called as hello does not exist

    Exception exceptions.AttributeError: "DbfilenameShelf instance has no
    attribute 'writeback'" in
    >>>


    Stack:
    '__main__', line 7: pass
    'shelve'.__del__(), line 148: self.close()
    'shelve'.close(), line 140: self.sync()
    > 'shelve'.sync, line 151: if self.writeback and self.cache:


    Forgive me if this query is obvious but I have searched mailing lists
    and google but could not resolve the issue.

    Speculative Analysis:

    shelve.open calls the DbfilenameShelf constructor passing the filename
    "hello".

    The DbfilenameShelf constructor does the following:

    def __init__(self, filename, flag='c', protocol=None,
    writeback=False, binary=None):
    import anydbm
    Shelf.__init__(self, anydbm.open(filename, flag), protocol,
    writeback, binary)

    The function anydbm.open throws an exception because:
    1. the filename does not exist
    2. the flag does not not contain a 'c' or an 'n'
    (See anydbm.py line 77)

    As the file "hello" does not exist the exception is thrown and caught
    in my code.

    I presume that python constructs the DbfilenameShelf object but does
    not construct the parent shelf object because of that exception.

    Then when python is cleaning up it destructs the DbfilenameShelf
    object which I presume calls the destructor of the parent shelf
    object. As the shelf object was not created due to initial exception,
    python could not see the attributes and hence the Attribute Error
    exception.

    Comments Anyone?

    Any questions please do not hesitate to contact me.

    Michael.
     
    Michael Mulcahy, Mar 2, 2004
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Rami A. Kishek

    Serious problem with Shelve

    Rami A. Kishek, Aug 17, 2003, in forum: Python
    Replies:
    6
    Views:
    505
    Rami A. Kishek
    Aug 19, 2003
  2. AK
    Replies:
    2
    Views:
    269
  3. softwindow
    Replies:
    4
    Views:
    279
    Jim Segrave
    May 26, 2006
  4. Douglas Applegate

    Problem with shelve/gdbm

    Douglas Applegate, Oct 19, 2007, in forum: Python
    Replies:
    0
    Views:
    370
    Douglas Applegate
    Oct 19, 2007
  5. Problem with shelve

    , Nov 6, 2008, in forum: Python
    Replies:
    1
    Views:
    310
    Paul Rudin
    Nov 6, 2008
Loading...

Share This Page