Message235925
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. |
|
Date |
User |
Action |
Args |
2015-02-13 23:38:54 | martin.panter | set | recipients:
+ martin.panter, pitrou, vstinner, Arfrever, akira, serhiy.storchaka |
2015-02-13 23:38:54 | martin.panter | set | messageid: <1423870734.33.0.688036566078.issue19829@psf.upfronthosting.co.za> |
2015-02-13 23:38:54 | martin.panter | link | issue19829 messages |
2015-02-13 23:38:54 | martin.panter | create | |
|