Serhiy Storchaka added the comment: > Serhiy: why did you add 2.7 to this bug? For 2.7, I don’t think anything > should be done. There is no ResourceWarning in 2.7.
Just for the case. Not calling close() in __del__() is one option, and it looks attractive. But there are possible hidden catches. There is no guarantee that flush() writes all buffered data, some stateful encoder or compressor can left some data in the buffer unless explicitly closed. close() can write required footer or close connection. If not call close() in __del__(), GzipFile will produce incorrect file. May be this is appropriate. This is why explicit close() should be called or context manager should be used. Other option is to use some API through all closable objects. _dealloc_warn() is not the only option. 1. Add an optional parameter to close() methods to denote that it is called from __del__. This is backward incompatible option, it is too late to do this. 2. __del__() calls special method instead of close() if exists. 3. The _dealloc_warn() option (the name should be changed). The wrapper delegates emitting a warning to wrapped object by calling the _dealloc_warn() method if exists. Unlike to previous option this method is called in addition to close(), not instead. 4. The wrapper checks special attribute (or calls a method) of wrapped object. If it exists and is true, the wrapper emits a warning. ---------- nosy: +benjamin.peterson, stutzbach versions: -Python 2.7 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue19829> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com