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.

Author martin.panter
Recipients Arfrever, akira, martin.panter, pitrou, serhiy.storchaka, vstinner
Date 2015-02-13.23:38:54
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1423870734.33.0.688036566078.issue19829@psf.upfronthosting.co.za>
In-reply-to
Content
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.
History
Date User Action Args
2015-02-13 23:38:54martin.pantersetrecipients: + martin.panter, pitrou, vstinner, Arfrever, akira, serhiy.storchaka
2015-02-13 23:38:54martin.pantersetmessageid: <1423870734.33.0.688036566078.issue19829@psf.upfronthosting.co.za>
2015-02-13 23:38:54martin.panterlinkissue19829 messages
2015-02-13 23:38:54martin.pantercreate