Index: Lib/test/test_io.py =================================================================== --- Lib/test/test_io.py (révision 67070) +++ Lib/test/test_io.py (copie de travail) @@ -9,6 +9,8 @@ import unittest from itertools import chain, cycle from test import support +import warnings +import gc import codecs import io # The module under test @@ -1245,12 +1247,34 @@ self.assertRaises(ValueError, io.FileIO, "/some/invalid/name", "rt") self.assertEqual(w.warnings, []) +class CloseFDTest(unittest.TestCase): + def setUp(sel): + with io.open(support.TESTFN, "w") as f: + f.write("line1\n") + f.write("line2\n") + + def testReadClosed(self): + with io.open(support.TESTFN, "r") as f: + file = io.open(f.fileno(), closefd=False) + file.close() + self.assertRaises(ValueError, file.readline) + + def testNoClose(self): + with warnings.catch_warnings(record=True) as warns: + with io.open(support.TESTFN, "r") as f: + file = io.open(f.fileno(), closefd=False) + # destructor should no raise a RuntimeWarning + # (close unclosable file) + del file + gc.collect() + self.assertEqual(warns, []) + def test_main(): support.run_unittest(IOTest, BytesIOTest, StringIOTest, BufferedReaderTest, BufferedWriterTest, BufferedRWPairTest, BufferedRandomTest, StatefulIncrementalDecoderTest, - TextIOWrapperTest, MiscIOTest) + TextIOWrapperTest, MiscIOTest, CloseFDTest) if __name__ == "__main__": unittest.main() Index: Modules/_fileio.c =================================================================== --- Modules/_fileio.c (révision 67070) +++ Modules/_fileio.c (copie de travail) @@ -61,10 +61,7 @@ fileio_close(PyFileIOObject *self) { if (!self->closefd) { - if (PyErr_WarnEx(PyExc_RuntimeWarning, - "Trying to close unclosable fd!", 3) < 0) { - return NULL; - } + self->fd = -1; Py_RETURN_NONE; } errno = internal_close(self);