Martin Panter added the comment:

It looks like the C _io close() implementations delegate to the wrapped 
object’s undocumented _dealloc_warn() method to emit the warning if 
“self->finalizing” is set. For wrapped objects like BytesIO that do not have 
it, I guess the error due to the missing method is ignored.

There is no Python implementation of FileIO yet (see Issue 21859), so the 
Python file wrapper classes still use the C FileIO implementation, which emits 
a resource warning. However for the wrapper classes, _pyio.IOBase.__del__() 
explicitly invokes the wrapper’s close() method, which will invoke 
FileIO.close() method, which bypasses the warning.

Similarly, any object inheriting from the C implmentation’s _io.IOBase will 
also have close() explicitly invoked when being finalized, bypassing any 
warnings of the underlying wrapped object. The SocketIO instances returned by 
socket.makefile() are an example of this.

----------

_______________________________________
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