Index: Lib/test/test_io.py =================================================================== --- Lib/test/test_io.py (révision 66995) +++ 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 @@ -1237,13 +1239,35 @@ else: self.assert_(issubclass(obj, io.IOBase)) +class FileIOTest(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.FileIO(f.fileno(), "r", 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.FileIO(f.fileno(), "r", 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, FileIOTest) if __name__ == "__main__": unittest.main() Index: Modules/_fileio.c =================================================================== --- Modules/_fileio.c (révision 66995) +++ 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);