bpo-18748: test_io: silence destructor errors by vstinner · Pull Request #12805 · python/cpython

I tagged this PR as a WIP because it doesn't fix all issues:

test_reader_writer_close_error_on_close (test.test_io.CBufferedRWPairTest) ...
Exception ignored in: <_io.BufferedRWPair object at 0x7f4aa6fb2c50>
ValueError: flush of closed file
Exception ignored in: <_io.BufferedWriter>
ValueError: flush of closed file
ok

test_writer_close_error_on_close (test.test_io.CBufferedRWPairTest) ...
Exception ignored in: <_io.BufferedWriter>
ValueError: flush of closed file
ok

test_misbehaved_io (test.test_io.CBufferedRandomTest) ...
Exception ignored in: <_io.BufferedRandom>
OSError: Raw stream returned invalid position -123
Exception ignored in: <_io.BufferedRandom>
OSError: Raw stream returned invalid position -123
ok

test_write_non_blocking (test.test_io.CBufferedRandomTest) ...
Exception ignored in: <_io.BufferedRandom>
io.UnsupportedOperation: seek
ok

Remaining failures are related to CBufferedRWPairTest, but I'm not sure that it's a bug in the test or in io.BufferedRWPair. buffered_close() which doesn't call parent IOBase.close() method, wheareas _io_FileIO_close_impl() does call it. I'm always lost in the code base of the io module, so I can be wrong ;-)

The same test logs no exception with the pure Python implementation.

cc @pitrou @methane @serhiy-storchaka