This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Python shelve __del__ ignored exception
Type: enhancement Stage:
Components: Library (Lib) Versions: Python 3.8
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: libbkmz
Priority: normal Keywords:

Created on 2020-01-03 16:19 by libbkmz, last changed 2022-04-11 14:59 by admin.

Files
File name Uploaded Description Edit
test_python_shelve_issue.py libbkmz, 2020-01-03 16:19 python testcases via unittests library to reproduce the issue
Messages (1)
msg359242 - (view) Author: Ilya (libbkmz) Date: 2020-01-03 16:19
I'm using my own implementation of the memoize by shelve module. In the attachment, there are 2 simple test cases which pass but the console there are a lot of messages like that:

Exception ignored in: <function Shelf.__del__ at 0x0000023202F363A0>
Traceback (most recent call last):
  File "C:\Miniconda2\envs\38_common\lib\shelve.py", line 162, in __del__
    self.close()
  File "C:\Miniconda2\envs\38_common\lib\shelve.py", line 144, in close
    self.sync()
  File "C:\Miniconda2\envs\38_common\lib\shelve.py", line 172, in sync
    self.dict.sync()
  File "C:\Miniconda2\envs\38_common\lib\dbm\dumb.py", line 129, in _commit
    with self._io.open(self._dirfile, 'w', encoding="Latin-1") as f:
PermissionError: [Errno 13] Permission denied: 'C:\\project\\tests\\test_memoize_tmp_t5tai08p\\memoize_test_file.dat.dir'

Exception ignored in: <function _Database.close at 0x0000023202EF9040>
Traceback (most recent call last):
  File "C:\Miniconda2\envs\38_common\lib\dbm\dumb.py", line 274, in close
    self._commit()
  File "C:\Miniconda2\envs\38_common\lib\dbm\dumb.py", line 129, in _commit
    with self._io.open(self._dirfile, 'w', encoding="Latin-1") as f:
PermissionError: [Errno 13] Permission denied: 'C:\\project\\tests\\test_memoize_tmp_t5tai08p\\memoize_test_file.dat.dir'


Basically, the main issue can be explained like that - Python dbm.dumb._Database should maintain self._modified the attribute in the right way(set it to False) after the _commit method. 

Later I will try to make changes in the dbm.dumb module and run Python internal tests for that modification to see any regression, if not will add PR here.
History
Date User Action Args
2022-04-11 14:59:24adminsetgithub: 83383
2020-01-03 16:19:53libbkmzcreate