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

Reply via email to